![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Универсальный запуск программы? [D5, Win95/98]
Alek Aaz © (2003-09-09 17:06:00)
Подскажите, кто может. Хочу сделать чтобы программа (инсталлятор) запускалась и под DOS и под windows. Т.е. маленькая программа тестирует систему и далее запускает либо win инсталлятор, либо DOS. Можно конечно сделать консольное приложение, но как в нем тогда протестировать наличие windows и скрыть свой запуск если она есть (короче, чтобы при запуске программы не отображалось черное окно)?
Во загнул :)
AlexRya (2003-09-11 12:52:00) [1]
В общем-то, чтобы изменить DOS-stub не обязательно использовать асм. В некоторых компиляторах C++ есть пармаетр, указвающий на то, какую прогу затолкать в стаб. Можно также в ручныю подправить екзешник, так как надо буде изменить всего один параметр - смещение PE заголовка. Остальное все считается относительно него, а не начала файла. Сделать это не так уж и сложно, как кажется.
Игорь Шевченко (2003-09-11 10:28:00) [2]
Alek Aaz © (11.09.03 04:02)
> А если CD-шника нет? Я то с дискетки загружусь :)
Тогда тебе не надо определять, есть ДОС или нету - если дискета ДОСовская, то однозначно ДОС :)
А я бы посоветовал не мудрствуя лукаво писать инсталлятор под ДОС, как написана установка Windows NT. А для учета запуска под Windows вводить ключик в командной строке, опять же, как в установке Windows NT - winnt /w
NightAngel (2003-09-11 09:52:00) [3]
> Alek Aaz Что сюда пихать? ХЭЛП!
Самое простое решение - это проверить в каком режиме процессор (реальный/защищённый). Win не работает с реальным режимом. Можно ещё проверить через сервис DPMI 2Fh, но не уверен, что Винда не упадёт. Может ещё как-нибудь можно...
Function TestWin:boolean;
asm
smsw ax // помещаем CR0 в ax
shr ax,1 // Проверяем бит PE
jc isprotected
... // Реальный режим, мы в DOS
isprotected:
... // Защищённый режим, мы в Win
end;
Alek Aaz (2003-09-11 04:02:00) [4]
А если CD-шника нет? Я то с дискетки загружусь :)
Игорь Шевченко (2003-09-10 17:29:00) [5]
Alek Aaz (10.09.03 16:59)
> Посмотрю я на тебя когда какой-нибудь вирь тебе систему
> порушит
Загружусь с компакта, выберу опцию восстановления.
Сдается мне, ты с такой задачей будешь очень долго возиться.
А вот откуда ты возьмешь при порушенной системе загрузчик, которые тебе DOS-формат EXEшника загрузит, да еще обеспечит все вызовы DOSа мне очень интересно - поделись :)
Alek Aaz (2003-09-10 16:59:00) [6]
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;
:)
CMeX (2003-09-10 10:01:00) [7]
Пиши на Turbo Pascalв Защищенном режиме ( или Real+ Windows) и все будет работать везде (кроме Unix-ов конечно)... Разница в том, что добавишь лишний модуль в предложении Uses
Songoku (2003-09-10 02:31:00) [8]
Удалено модератором
Примечание: Offtopic
NightAngel (2003-09-10 02:25:00) [9]
> Ну так вот в 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-09 23:06:00) [10]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!!! Желаю удачи!!!
HolACost! (2003-09-09 20:37:00) [11]
Удалено модератором
Примечание: Offtopic
Игорь Шевченко (2003-09-09 17:08:00) [12]
А зачем так сложно ? Уже и DOS нигде не остался...