ТЛ; др
Я пытаюсь понять разницу запуска программы напрямую, дважды щелкнув исполняемый файл по сравнению с запуском через терминал или программно через CreateProcess
в Windows 10.
длинная версия
Поскольку это моя проблема, выполнение старой игры (около 2003 года с использованием D3D8) с помощью двойного щелчка в Windows 10 работает нормально. Выполнение игры через исполняемый день второго дня (также около 2003 г.) с использованием CreateProcess
, кажется, иногда работает нормально.
Но выполнение его через мой новый исполняемый файл golang никогда не работает. Вместо этого я получаю очень маленький экран. Поэтому я хочу понять, в чем техническая разница.
Для справки, мой код golang выглядит так: (маленький экран)
cmd := exec.Command(filepath.Join(".", "Game.exe"))
err := cmd.Start()
Разборка вторичного исполняемого файла дает мне следующее: (обычный экран)
CPU Disasm
Address Hex dump Command Comments
004043AF |. 51 PUSH ECX ; /pProcessInformation = 59C7F521 -> {hProcess=???,hThread=???,ProcessID=???,ThreadID=???}
004043B0 |. 52 PUSH EDX ; |pStartupInfo => OFFSET LOCAL.16
004043B1 |. 68 28E54000 PUSH OFFSET 0040E528 ; |CurrentDirectory = "."
004043B6 |. 50 PUSH EAX ; |pEnvironment => NULL
004043B7 |. 50 PUSH EAX ; |CreationFlags => 0
004043B8 |. 6A 01 PUSH 1 ; |InheritHandles = TRUE
004043BA |. 50 PUSH EAX ; |pThreadSecurity => NULL
004043BB |. 50 PUSH EAX ; |pProcessSecurity => NULL
004043BC |. 68 10E54000 PUSH OFFSET 0040E510 ; |CommandLine = "Game.exe"
004043C1 |. 50 PUSH EAX ; |ApplicationName => NULL
004043C2 |. FF15 8CB04000 CALL DWORD PTR DS:[<&KERNEL32.CreateProc ; \KERNEL32.CreateProcessA
Когда я говорю, что игра представляет собой крошечный экран, он выглядит так:
по сравнению с этим, когда он выполняется напрямую двойным щелчком: (не обращайте внимания на то, что он черный, это просто обычный запуск)
Дополнительная информация: На самом деле проблема существует только в Windows 10. Windows 7 полностью в порядке.
Для Windows 10 единственный способ сделать его обычным экраном - использовать эту настройку:
Когда это используется, я получаю обычный экран при использовании двойного щелчка или вторичного исполняемого файла. Но это все еще маленький экран в моем приложении Golang.