【问题标题】:Process.Start(string); - starts process for a few seconds. C#Process.Start(字符串); - 启动过程几秒钟。 C#
【发布时间】:2012-07-10 16:56:44
【问题描述】:

我有一个 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

【问题讨论】:

  • 你能给我们看一些代码吗?错误代码 299 表示对 ReadProcessMemory 或 WriteProcessMemory 的调用未成功完成,因此了解您尝试对新进程执行的操作似乎非常重要。
  • 或许您可以告诉我们您要启动什么流程?
  • 您是否知道您尝试启动的那些可执行文件是 64 位还是 32 位?另外,您能否告诉我们您是否可以自己执行那些“文件名” [in Process.Start(filename)] 并得到任何错误?
  • 我有 32 位系统。如果我使用 explorer.exe 运行可执行文件,它将起作用。但是当我尝试通过我的程序执行时它失败了。所以我的系统是 32 位的,所有的可执行文件也是 32 位的。或不?代码只是: Process.Start(filename);该过程会创建几秒钟或几毫秒然后失败
  • 您能否检查一下您的控制台应用程序(C#)是否以管理员身份运行并且仍然抛出相同的错误?

标签: c# process process.start


【解决方案1】:

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

尝试设置工作目录:

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

Process.Start(processInfo);

【讨论】:

  • 也许游戏有反作弊保护?您可以直接在 cmd 控制台和/或使用自制的批处理文件启动游戏吗?
  • 我认为是反作弊保护。但是,如果我尝试从 cmd-console 执行它,它将起作用。
【解决方案2】:

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

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

Process.Start(processInfo);

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

【讨论】:

  • 谢谢,但这没有帮助。
  • 您能否提供更多关于 AOGame.exe 正在做什么的技术指导?真的很有帮助。
  • 作为另一个想法,只是为了证明我们没有在追逐错误的兔子,您是否可以尝试在您的启动参数中调用一个非常简单的应用程序,例如记事本并确保它正常启动?
  • 是的。其他应用程序工作正常。我不知道这个 AOGame.exe 有什么问题。当它来自 explorer.exe 时,他在没有参数的情况下执行。
  • 是的!我找到了解决方案!首先 - 创建一个批处理文件,它将执行 AOgame.exe 然后 - 从我的应用程序执行批处理文件
【解决方案3】:

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

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

...我不放弃:-D

【讨论】:

    【解决方案4】:

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

    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");
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-22
      • 2016-02-25
      • 1970-01-01
      • 2017-07-12
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多