1

我有一个 Windows 7(x86)和我的控制台应用程序(C#)。在我的应用程序中,我需要运行一个新进程。应用程序包括:

Process.Start(filename);

当应用程序运行时,它会创建一个新进程,但他会在几秒钟后销毁,甚至没有被初始化。在调试中我看到了这个信息:

"proc.MainModule" threw exception "System.ComponentModel.Win32Exception"
NativeErrorCode = 299
ExitCode = -3

如果我通过 Windows 运行所需的应用程序 - 它运行。请问,谁能帮帮我?

当它以管理员身份运行时,它具有相同的错误。

关于 ReadProcessMemory or WriteProcessMemory didn't complete successfully. 之后我什么也不做Process.Start(); 这个错误我可以在调试之后看到var proc = Process.Start(filename);

AOgame.exe - 是我的可执行应用程序。这是一个游戏Allods的exe文件。当我尝试执行其他应用程序时,它们开始良好。我认为这是 AOgame.exe 的问题。但我不知道如何消除错误。

在 AOgame.exe 的属性中没有参数。

我认为这是反作弊保护。但是,如果我尝试从 cmd-console 执行它,它将起作用。

是的!我找到了解决方案!首先 - 创建一个批处理文件,它将执行 AOgame.exe 然后 - 从我的应用程序执行批处理文件 这是一个奇怪的解决方案,但它可以工作:D

4

4 回答 4

0

我将建议您使用将 UseShellExecute 设置为 false 的 ProcessStartInfo 实例,如下所示:

ProcessStartInfo processInfo = new ProcessStartInfo("AOGame.exe");
processInfo.UseShellExecute = false;

Process.Start(processInfo);

这迫使启动由可执行文件中提供的进程名称直接处理,而不是依赖于 shell/helper 例程。如果您可以提供有关 AOGame.exe 内部功能的更多详细信息,这可能会有所帮助。

于 2012-07-10T18:11:20.403 回答
0

如果您的 Windows 开始菜单中有一个工作链接,您可以试试这个:

Process.Start("explorer.exe", @"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\foo\bar.lnk");

...我不放弃:-D

于 2012-07-10T18:11:36.820 回答
0

我已经为此工作了一段时间。我发现调试器实际上不理解运行进程的字符串我的意思是你不能这样做

Process.start(path);

相反,您可以使用以下代码:

       string pathak="AOgame.exe";
       string rty = pathak.Remove(pathak.Length - 5);
       string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\";
       Process.Start(path + rty + "exe");

希望这对您有所帮助。

于 2014-09-03T05:37:51.763 回答
0

也许该过程需要工作目录中的一些文件?...

尝试设置工作目录:

ProcessStartInfo processInfo = new ProcessStartInfo("foo.exe");
processInfo.WorkingDirectory = @"C:\bar";

Process.Start(processInfo);
于 2012-07-10T17:56:13.763 回答