从技术上双击可执行文件会发生什么

时间:2019-03-30 17:36:30

标签: c++ windows go createprocess

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

当我说游戏是一个小屏幕时,它显示如下:

enter image description here

直接通过双击执行时会遇到这种情况:(不要介意它是黑色的,只是正常的启动)

enter image description here


其他信息:实际上,该问题仅存在于Windows 10中。Windows 7完全正常。

对于Windows 10,使其变为正常屏幕的唯一方法是使用此设置:

enter image description here

使用该选项时,使用双击或辅助可执行文件时,我可以看到正常屏幕。但是在我的Golang应用程序上,它的屏幕仍然很小。

0 个答案:

没有答案