我有一个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
答案 0 :(得分:0)
也许这个过程需要工作目录中的一些文件?...
尝试设置工作目录:
ProcessStartInfo processInfo = new ProcessStartInfo("foo.exe");
processInfo.WorkingDirectory = @"C:\bar";
Process.Start(processInfo);
答案 1 :(得分:0)
我建议您使用ProcessStartInfo实例,并将UseShellExecute设置为false,如下所示:
ProcessStartInfo processInfo = new ProcessStartInfo("AOGame.exe");
processInfo.UseShellExecute = false;
Process.Start(processInfo);
这会强制启动由可执行文件中提供的进程名直接处理,而不是依赖于shell / helper例程。如果您可以提供有关AOGame.exe内部工作的更多详细信息,那么可能会有所帮助。
答案 2 :(得分:0)
如果你的windows startmenu中有一个工作链接,你可以试试这个:
Process.Start("explorer.exe", @"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\foo\bar.lnk");
......我不放弃:-D
答案 3 :(得分: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");
希望这对你有所帮助。