我有一个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控制台执行它,它会起作用。
是!我找到了解决方案!首先-创建一个批处理文件,它将执行AOgame.exe,然后-从我的应用程序执行批处理文件这是一个奇怪的解决方案,但它有效:D
也许进程需要工作目录中的一些文件?。。。
尝试设置工作目录:
ProcessStartInfo processInfo = new ProcessStartInfo("foo.exe");
processInfo.WorkingDirectory = @"C:bar";
Process.Start(processInfo);
我建议您使用UseShellExecute设置为false的ProcessStartInfo实例,如下所示:
ProcessStartInfo processInfo = new ProcessStartInfo("AOGame.exe");
processInfo.UseShellExecute = false;
Process.Start(processInfo);
这迫使启动由可执行文件中提供的进程名称直接处理,而不是依赖于shell/helper例程。如果你能提供更多关于AOGame.exe内部功能的细节,这可能会有所帮助。
如果你的windows启动菜单中有一个工作链接,你可以试试这个:
Process.Start("explorer.exe", @"C:ProgramDataMicrosoftWindowsStart MenuProgramsfoobar.lnk");
我不会放弃:-D
我已经做了一段时间了。我发现调试器实际上不理解用于运行进程的字符串我的意思是你不能做这个
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");
希望这对你有所帮助。