Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.038 c
3-41042
Кодер
2003-10-15 09:55
2003.11.13
Как вставить картинки в MSSQL?


9-40769
TButton
2003-04-06 20:52
2003.11.13
работа над RPG


3-41036
Fantom_
2003-10-08 13:13
2003.11.13
Сортировка по Lookup-полю


4-42225
JS
2003-09-02 16:45
2003.11.13
Global memory


6-41861
Юрий Краснощек
2003-09-05 12:18
2003.11.13
Как узнать включен, ли компьютер в лок. сети. Не пингуя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский