31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113

Запуск win16 приложения через CreateProcess

16.12.2020, 14:34. Показов 1551. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Вот мой код на запуск 16 битного приложения. Запускается это все на Windows 7 x32.
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
    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,              // No creation flags
        NULL,           // Use parent's environment block
        _T("C:\\VSP5000\\V_Sol"),           // Use parent's starting directory 
        &si,            // Pointer to STARTUPINFO structure
        &pi)           // Pointer to PROCESS_INFORMATION structure
        )
    {
        system("PAUSE");
        return 0;
    }
    WaitForSingleObject(pi.hProcess, 5000);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
Проблема состоит в следующем. Мне надо чтобы это приложение запускалось в общей виртуальной машине ntvdm, что собственно я и говорю делать указывая флаг CREATE_SHARED_WOW_VDM. При первом запуске все нормально, в диспетчере задач windows ключ у ntvdm стоит -w. Но это происходит если я выполняю только первый запуск. Если все это дело закрыть и запустить второй раз, то приложение запускается уже в частной ntvdm. Соответственно ключ у ntvdm уже -ws. Как это дело побороть? Такое впечатление, что флаг CREATE_SHARED_WOW_VDM вообще не действует...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2020, 14:34
Ответы с готовыми решениями:

Запуск стороннего приложения через CreateProcess
Доброго времени суток! Есть два одинаковых консольных приложения, но с разными именами. Из первого вызывается второе следующей...

Запуск Win16 приложения на Windows 7 x86
Пытаюсь запустить программу написанную под Win16 с помощью CreateProcess ниже приведенным кодом на Windows 7 x86. STARTUPINFO si; ...

Запуск приложения через CreateProcess(), передать параметры запуска, указать тот же каталог
Здравствуйте, помогите побороться с CreateProcess() Есть рабочая программа, которая должна запустить независимый процесс. Запуск нужно...

5
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
16.12.2020, 17:40
Цитата Сообщение от korochinskiy Посмотреть сообщение
Как это дело побороть?
ntvdm.exe скорее всего сервис.
перед закрытием своего приложения, останавливайте его и/или закрывайте.
1
31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113
16.12.2020, 19:16  [ТС]
ntvdm это не сервис. Поведение не зависит от того грохноул я его перед повторным запуском или нет. Все равно повторный запуск в частной виртуальной машине (ака ntvdm).
0
31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113
18.12.2020, 12:12  [ТС]
Обнаружил интересное поведение. При запуске из под отладчика Visual Studio все нормально запускается. Процесс win16 приложения открывается в общей виртуальной машине ntvdm с ключем -w. Если запускать мое приложение напрямую, то процесс win16 приложения открывается уже в частной ntvdm и ключ -ws. Почему так происходит?

Добавлено через 21 минуту
Еще интересней. В Visual Studio даю запуск без отладки (Ctrl + F5) все тоже начинает нормально работать...
0
31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113
19.12.2020, 00:37  [ТС]
Если сделать ярлык для запуска и Объект ему задать C:\Windows\System32\cmd.exe /C "C:\Users\developer\Documents\Visual Studio 2017\Projects\StartProcess\Release\Start Process.exe", то тоже нормально запускает. Но при этом открывается окно cmd, что мне не надо...

Добавлено через 1 час 35 минут
Короче победил я это дело так. Рядом с моим exe создал файл bat
Code
1
2
@echo off
start Restarter.exe
Консоль на секунду промаргивает, но мое приложение запускается и нормально запускает win16 приложение. Кто может объяснить такое поведение? Почему только через батник нормально запускается (ну либо как я писал выше через отладчик visual studio)?
0
31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113
19.12.2020, 18:43  [ТС]
Получил STARTUPINFO структуру для моего приложения. Отличие только в gwFlags, но значение этого флага говорит, что wShowWindow содержит дополнительную информацию. В wShowWindow и там и там лежит 1 (SW_SHOWNORMAL). Так что думаю не в этом отличие запуска через батник и напрямую.
Миниатюры
Запуск win16 приложения через CreateProcess  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.12.2020, 18:43
Помогаю со студенческими работами здесь

Запуск приложения,через смартскрин
При запуске стороннего ехе, с помощью ShellExecute или CreateProcess не открывается smartscreen windows. При ручном открытии он...

Запуск приложения через WinExec
Ребята помогите пожалуйста запустить приложение, используя WinExec WinExec("1.exe", SW_SHOW); В папку с файлом .cpp положил exe...

Запуск WinRar с параметрами через CreateProcess
Здравствуйте. Подскажите пожалуйста как запустить WinRar с параметрами через CreateProcess. Через ShellExecute делаю так и все...

Запуск приложения через CreateProcess и ожидание его завершения
В общем, суть в следующем: нужно, чтобы программа запускала консольное приложение DD под windows, передавала ему необходимые параметры, и...

CreateProcess() и запуск приложения
Служба отслеживает наличие процесса запущенного приложения, если такового нет - стартует его. procedure...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru