Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113

Запуск Win16 приложения на Windows 7 x86

21.03.2019, 16:08. Показов 1467. Ответов 5

Студворк — интернет-сервис помощи студентам
Пытаюсь запустить программу написанную под Win16 с помощью CreateProcess ниже приведенным кодом на Windows 7 x86.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
 
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
 
    TCHAR czCommandLine[] = _T("C:\\VSP5000\\BIN\\VSP5EMU.EXE -i.\\v_sol.ini");
 
    // Start the child process. 
    if (!CreateProcess(NULL,   // No module name (use command line)
        czCommandLine,        // Command line
        NULL,           // Process handle not inheritable
        NULL,           // Thread handle not inheritable
        FALSE,          // Set handle inheritance to FALSE
        CREATE_SHARED_WOW_VDM,              // Сreation flags
        NULL,           // Use parent's environment block
        NULL,           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi)           // Pointer to PROCESS_INFORMATION structure
        )
    {
        printf("CreateProcess failed (%d).\n", GetLastError());
        system("PAUSE");
        return 0;
    }
 
 
    WaitForSingleObject(pi.hProcess, 5000);
 
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

Программа запускается, появляется ntvdm процесс, но если посмотреть в диспетчере задач, то мы увидим, что нет потоков запущенных под ntvdm (картинка 1) да и смущает параметр запуска -ws. Смотрю с помощью VDMEnumTaskWOWEx и тоже ничего не находится.
Для примера, на картинке 2 запуск с помощью ярлыка. Есть потоки wowexec и приложения. VDMEnumTaskWOWEx тоже их находит. Причем параметр запуска в ntvdm уже -w.

В реестре Windows ключ DefaultSeparateVDM стоит в no.

Пробовал запускать через ярлык из моего приложения(с помощью ShellExecuteExW), с помощью WinExec, ShellExecuteExW ситуация та же.
Если второй раз запустить Win16 приложение (через мою программу), то оно открывается в новом ntvdm, хотя по идее должно в том же (параметры запуска в CreateProcess и ключ в реестре указывают на это). Если тоже самое делать в Windows XP, то все нормально работает.

Как мне добиться правильного запуска win16 приложения в Windows 7?
Какие параметры запуска у ntvdm и что они означают?
Миниатюры
Запуск Win16 приложения на Windows 7 x86   Запуск Win16 приложения на Windows 7 x86  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2019, 16:08
Ответы с готовыми решениями:

Различия по весу между Windows 7 Ultimate (x86) и Windows 7 Professional (x86)
Здравствуйте, Скажите есть различия по весу между установленными Windows 7 Ultimate (x86) и Windows 7 Professional (x86)? Ведь в Ultimate...

Запуск AVD - Intel x86 Atom System Image под Windows 7 (cpu: AMD)
Всем привет. Собственно как запустить ? Intel HAXM не устанавливается так как процессор AMD. (AMD FX 8320 x64). Без него кидает эрор: ...

Запуск приложения, написанного для Windows 10, в Windows 8
Привет.Есть такое приложение PS4 Remote Play. Вместо того что бы четко написать "данная программа работает только на вин10"...

5
31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113
21.03.2019, 19:22  [ТС]
P.S. Выяснил такую штуку, что после перезагрузки Windows 7 все запускается как надо, но до тех пор пока я не перезапущу свою программу, которая запускает Win16.
Т.е. я обернул выше приведенный код в

C++
1
2
3
4
5
while(true)
{
      // тут выше приведенный код
      system("PAUSE");
}
Когда моя программа стоит на паузе я убиваю из Диспетчера задач процесс ntvdm (соответственно и Win16 приложение), нажимаю "продолжить" в своей программе и Win16 приложение нормально запускается...
0
31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113
23.03.2019, 13:02  [ТС]
Попробовал создать приложение Win16 которое через WinExec запускает нужную мне Win16 программу. Все работает, нормально запускает. Потом пытаюсь из моего приложения запустить уже эту Win16 программу (которая запускает нужное мне приложение). Выходит то же самое, что и при запуске напрямую (т.е. как на первой картинке в первом сообщении).

По моему -ws флаг, это запускать приложения в раздельных ntvmd, и вот почему он так делает, если в реестре и в параметрах CreateProcess указано, что надо запускать в одной???
0
31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113
29.03.2019, 18:01  [ТС]
Попробовал запустить Win16 приложение через AutoIT скрипт (команда RUN). Правильно запустилось, работает. Кто нибудь знает, что по капотом у этой команды RUN из AutoIT? Ведь наверняка это или CreateProcess или ShellExecute...
0
31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113
01.04.2019, 12:02  [ТС]
Нашел исходник AutoIT. Действительно под капотом у его команды RUN сидит CreateProcess. Ну думаю ок, попробую скомпилить исходник и через него запустить скрипт AutoIt`а... А вот и фигушки... Ситуация та же, что и через прямой запуск из c++ (хотя через родной AutoIt`овский все правильно запускается)... Короче пока закончились мысли на этот счет...
0
31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113
02.04.2019, 17:51  [ТС]
Переписал я все на AutoIT`е. Возможностей для моей задачи хватило.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.04.2019, 17:51
Помогаю со студенческими работами здесь

Запуск приложения, написанного для Windows 8, в Windows 7
Привет. Есть один софт-RemotePlay PS4 . Он работает только на ОС не ниже Win8. А у меня Win7. Восьмёрка не ставиться из-за того что её не...

Запуск Qt приложения на windows 7-10
Все привет. Собрал Qt приложение на Винде 10,запускается только на десятке. Необходимо запускать на windows 7. Что посоветовать можете....

Как установить Windows 10 x64 (после обновления с Win 7 x86 до Win 10 x86) сохранив лицензию
Вопрос такой. У меня стояла седьмая 32-ух битная винда. Но процессор 64 разрядный. Так вот, я обновился до десятки, которая тоже 32-ух...

Запуск консольного приложения Windows XP
Добрый день! Уважаемые коллеги подскажите плиз куда копать. На промышленный компьютер устанавливаю XPe. Требуется после загрузки...

Запуск стороннего приложения из VB в Windows 7
Добрый день! Занимаюсь программированием не так давно, поэтому можно сказать только учусь. Помогите пожалуйста разобраться в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru