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

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

16.12.2020, 14:34. Показов 1546. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru