tl; dr
我试图了解通过双击可执行文件与通过终端直接运行程序或通过Windows 10中的CreateProcess
以编程方式运行程序的区别。
长版
因为这是我的问题,所以双击Windows 10执行旧游戏(大约在2003年使用D3D8)是可以的。有时使用CreateProcess
通过Seconday可执行文件(也在2003年左右)执行游戏似乎还可以。
但是通过我的新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应用程序上,它的屏幕仍然很小。