Форум: "WinAPI";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизУниверсальный запуск программы? Найти похожие ветки
← →
Alek Aaz (2003-09-09 17:06) [0]Подскажите, кто может. Хочу сделать чтобы программа (инсталлятор) запускалась и под DOS и под windows. Т.е. маленькая программа тестирует систему и далее запускает либо win инсталлятор, либо DOS. Можно конечно сделать консольное приложение, но как в нем тогда протестировать наличие windows и скрыть свой запуск если она есть (короче, чтобы при запуске программы не отображалось черное окно)?
Во загнул :)
← →
Игорь Шевченко (2003-09-09 17:08) [1]А зачем так сложно ? Уже и DOS нигде не остался...
← →
HolACost! (2003-09-09 20:37) [2]Удалено модератором
Примечание: Offtopic
← →
Songoku (2003-09-09 23:06) [3]2 Alek Aaz -> Прывет!!!!
ммм ДА ... ну если ты это действительно хочешь сделать то на Delphi ты это 100% не напишешь! Это можно сделать на Assembler"e.
Каждый PE(Рortable Executable) win 32 .exe файл имет DOS stub. Это та часть фаила каторая при передачи ему управления проверяет в какой системе он находится то есть в Win32 или DOS. Как тебе это нверное известно кагда ты запускаешь какой либо win32 .exe файл поевляется вот такая строка "This рrogram cannot run in DOS mode". Ну так вот в Assembler"e можно изменять этот DOS stub. И ты можешь сделать так, что у тебя в exe фале будут две версии проги находится то есть Win & DOS. И если программа запускалась под DOS"ом то DOS stub будет передовать управление DOS"овской часть программы и на оборот Windows"кой!!! Только что бы тебе такой написать тебе потребуется выучить Assembler!!! Желаю удачи!!!
← →
NightAngel (2003-09-10 02:25) [4]> Ну так вот в Assembler"e можно изменять этот DOS stub.
И если программа запускалась под DOS"ом то DOS stub будет передовать управление DOS"овской часть программы и на оборот Windows"кой!!! Только что бы тебе такой написать тебе потребуется выучить Assembler!!!
Ну-ну... Это как? Хотелось-бы знать, как изменять Stub в ассемблере. И почему обязательно писАть Stub на ассемблере? Бред какой-то... Извините, не сдержался. Но идея верная.
Во-первых, где будет запущен такой exe-шник, совершенно не важно. Загрузчик сам разберётся какую из частей (DOS или Win) запускать. Во-вторых писАть Stub можно на чём угодно (это обычный DOS-овский Exe-шник), единственное ограничение - компилятор должен генерировать 16-ти битный код. Модель памяти можно использовать любую, кроме tiny. При компоновке Stub -программы в командной строке компоновщика нужно указать опции /KNOWEAS /STUB:"filename.exe", где filename.exe - имя Stub-программы, при необходимости с путем. Компоновщик заменит стандартную Stub-программу на Вашу.
← →
Songoku (2003-09-10 02:31) [5]Удалено модератором
Примечание: Offtopic
← →
CMeX (2003-09-10 10:01) [6]Пиши на Turbo Pascal в Защищенном режиме ( или Real + Windows) и все будет работать везде (кроме Unix-ов конечно)... Разница в том, что добавишь лишний модуль в предложении Uses
← →
Alek Aaz (2003-09-10 16:59) [7]2Игорь Шевченко
А зачем так сложно ? Уже и DOS нигде не остался...
Посмотрю я на тебя когда какой-нибудь вирь тебе систему порушит :)
2Songoku
Assembler - говоришь... Этого я и боюсь :( Мне кажется ситуация будет обстоять еще хуже :( Как бы не пришлось в hex редакторе править stub заголовок :(
2NightAngel
компилятор должен генерировать 16-ти битный код
А почему? Будет косить под старую досовскую программу?
Модель памяти можно использовать любую, кроме tiny
Сорри... издержки современного высшего образования. Где можно почитать в Сети о моделях памяти? Если не трудно, ткните носом, плиззз.
командной строке компоновщика
Таки любой компоновщик ???? И делфийский такое сможет?
А вообще, ОГРОМНОЕ спасибо!
2CMeX
Пиши на Turbo Pascal в Защищенном режиме ( или Real + Windows) и все будет работать везде (кроме Unix-ов конечно)...
ИМХО и в не защищеном будет работать везде... А для защищенного помнится какой-то менеджер Borlandовский нужен был. Не помню уже какой...
Разница в том, что добавишь лишний модуль в предложении Uses
В Real + Windows никогда ничего не делал... Что за модуль то? Можно пример? Простенькую программу типа Hello word! Строка под DOS и окошко под Windows.
2All
Собстевенно самое главное
Function TestWin:boolean;
Begin
Что сюда пихать? ХЭЛП!
End;
:)
← →
Игорь Шевченко (2003-09-10 17:29) [8]Alek Aaz (10.09.03 16:59)
> Посмотрю я на тебя когда какой-нибудь вирь тебе систему
> порушит
Загружусь с компакта, выберу опцию восстановления.
Сдается мне, ты с такой задачей будешь очень долго возиться.
А вот откуда ты возьмешь при порушенной системе загрузчик, которые тебе DOS-формат EXEшника загрузит, да еще обеспечит все вызовы DOSа мне очень интересно - поделись :)
← →
Alek Aaz (2003-09-11 04:02) [9]А если CD-шника нет? Я то с дискетки загружусь :)
← →
NightAngel (2003-09-11 09:52) [10]> Alek Aaz Что сюда пихать? ХЭЛП!
Самое простое решение - это проверить в каком режиме процессор (реальный/защищённый). Win не работает с реальным режимом. Можно ещё проверить через сервис DPMI 2Fh, но не уверен, что Винда не упадёт. Может ещё как-нибудь можно...
Function TestWin:boolean;
asm
smsw ax // помещаем CR0 в ax
shr ax,1 // Проверяем бит PE
jc isprotected
... // Реальный режим, мы в DOS
isprotected:
... // Защищённый режим, мы в Win
end;
← →
Игорь Шевченко (2003-09-11 10:28) [11]Alek Aaz © (11.09.03 04:02)
> А если CD-шника нет? Я то с дискетки загружусь :)
Тогда тебе не надо определять, есть ДОС или нету - если дискета ДОСовская, то однозначно ДОС :)
А я бы посоветовал не мудрствуя лукаво писать инсталлятор под ДОС, как написана установка Windows NT. А для учета запуска под Windows вводить ключик в командной строке, опять же, как в установке Windows NT - winnt /w
← →
AlexRya (2003-09-11 12:52) [12]В общем-то, чтобы изменить DOS-stub не обязательно использовать асм. В некоторых компиляторах C++ есть пармаетр, указвающий на то, какую прогу затолкать в стаб. Можно также в ручныю подправить екзешник, так как надо буде изменить всего один параметр - смещение PE заголовка. Остальное все считается относительно него, а не начала файла. Сделать это не так уж и сложно, как кажется.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.031 c