VB.NET进程.Start()立即停止

VB.NET进程.Start()立即停止,vb.net,process,Vb.net,Process,我对以下代码有一个奇怪的问题,我正在用VB.NET编写一个游戏启动器: Dim gameProcess As Process = New Process() gameProcess.StartInfo.UseShellExecute = False gameProcess.StartInfo.FileName = TextBox2.Text gameProcess.Start() Debug.Print("Game started") gameProcess.WaitForE

我对以下代码有一个奇怪的问题,我正在用VB.NET编写一个游戏启动器:

Dim gameProcess As Process = New Process()
gameProcess.StartInfo.UseShellExecute = False
gameProcess.StartInfo.FileName = TextBox2.Text
gameProcess.Start()
Debug.Print("Game started")
gameProcess.WaitForExit()
Debug.Print("Game stopped")
此代码适用于大多数程序,但对于其中一些程序(如帝国时代),我得到以下结果:

比赛开始了

游戏停止了

我看到游戏在任务管理器中运行了一瞬间,但它立即关闭有人知道为什么吗?当我从Windows运行游戏时,它工作正常

我也试过用Shell,同样的问题

我试过使用cmd.exe和/C参数,同样的问题(请注意,当我在Windows运行对话框中键入cmd.exe/C path_to_game_exe时,游戏也可以正常启动),只有当我从VB.NET应用程序启动它时,才会出现问题


我的最后一个想法是编写一个临时批处理文件并启动该文件,但这似乎是一个丑陋的解决方案。

许多游戏使用启动程序应用程序,在单独的进程中启动游戏,然后关闭。

许多游戏使用启动程序应用程序,在单独的进程中启动游戏,然后关闭。

可能是复制保护,它会检测系统上的调试器并退出进程


尝试在发布模式下编译游戏,并在Visual Studio未运行时运行应用程序。

可能是复制保护在系统上检测调试器并退出该进程


尝试在发布模式下编译游戏,并在Visual Studio未运行时运行应用程序。

您可以尝试的另一个选项:在startinfo中设置工作目录属性。您可以通过查看startmenu中游戏快捷方式的属性来查找此信息


您可以尝试的另一个选项:在startinfo中设置工作目录属性。您可以通过查看startmenu中游戏快捷方式的属性来查找此信息


windows事件日志上说什么?事件日志上说没有afaik,之前也检查过。windows事件日志上说什么?事件日志上说没有afaik,之前也检查过。不过,在这种情况下,这个游戏没有launcher exe,当我手动启动游戏时,进程名与我启动的进程名相同(因此它不会启动单独的进程)。但在这种情况下,此游戏没有launcher exe,当我手动启动游戏时,进程名与我启动的进程名相同(因此它不会启动单独的进程).应该提到我尝试在发布模式下编译(我认为调试器通常会做一些奇怪的事情)。没有骰子:(.应该提到我尝试在发布模式下编译(我认为调试器通常会做一些奇怪的事情)。没有骰子:(.就这样,非常感谢!有趣的是,这一点曾进入我的脑海,但我从来没有费心去研究它,因为大多数程序都启动得很好。我假设一个新进程的工作目录被设置为可执行文件本身的目录。用:gameProcess.StartInfo.WorkingDirectory=\uSystem.IO.Pa修复了它th.GetDirectoryName(TextBox2.Text)就是这样,非常感谢!有趣的是,这一点曾进入我的脑海,但我从来没有费心去研究它,因为大多数程序都启动得很好。我假设新进程的工作目录被设置为可执行文件本身的目录。用:gameProcess.StartInfo.WorkingDirectory=\uSystem.IO.Path修复了它.GetDirectoryName(TextBox2.Text)