【问题标题】:Process.Start() exits right away on Windows 7Process.Start() 在 Windows 7 上立即退出
【发布时间】:2017-10-21 10:23:10
【问题描述】:

Process.Start("d:/test.txt"); //simple .txt file 在 Windows 8 及更高版本上运行良好,但在 Windows 7 (x64) 上它会启动进程并立即关闭它。

我已经尝试过以下方法:

  1. 通过ProcessStartInfo 调用并设置CreateNoWindow=true、UseShellExecute=true 和Verb="runas"(虽然不知道为什么我必须设置这个)。

  2. 尝试附加 Exit 事件,它确认进程确实开始但它立即退出,我什至没有看到记事本窗口打开一秒钟。

编辑:我已经用图像文件和一些其他扩展进行了尝试,它们打开得非常完美。 .txt 文件(和/或可能其他格式)有问题。

【问题讨论】:

  • 试试Process.Start("notepad.exe", "d:/test.txt");
  • 这也行不通。我想保持通用,即应该打开任何文件扩展名。
  • 该代码在我的 Win7 机器上运行良好,正如它应该的那样。也可能是因为您的程序被编译为 x86 而操作系统(如 shell 或它所指向的)是 x64。
  • 这不是操作系统造成的...您有任何异常吗?您确定当前用户有权访问该文件吗?如果你在高架上运行它会起作用吗? Process.Start("notepad"); 有效吗?你能在那台机器上运行记事本吗?我建议您尝试创建一个新用户并尝试使用新帐户中的相同代码。
  • 这听起来像是一个 UAC 问题;尝试将“test.txt”移动到 %PUBLIC% 或 %APPDATA%。或者尝试以管理员身份运行您的程序。

标签: c# windows-7 process.start


【解决方案1】:

我能够通过将构建平台从 AnyCPU 更改为专门的 x64(我的目标机器是 x64)来解决这个错误。这很奇怪,但它解决了问题!感谢 Simon Mourier 的提示。

【讨论】:

    【解决方案2】:

    仅仅使用呢

    Process.start("start", "d:\\test.txt")
    

    或

    Process.start("explorer", "d:\\test.txt")
    

    或

    Process.start("cmd", "/c notepad.exe d:\\test.txt")
    

    如果仍然无法正常工作,请尝试使用直接的 shellexecute,如此处所述 Executing another program from C#, do I need to parse the "command line" from registry myself?

    https://www.gamedev.net/topic/310631-shellexecuteex-api-call-in-c/

    【讨论】:

      【解决方案3】:

      我以前在 Windows 7 上遇到过这种情况。您的 Path 环境变量可能已损坏。 Path 变量中可以使用的最大字符数为 2047。在您的机器上安装许多可执行文件可能会溢出 Path 变量。这是一个 SO 讨论,显示了一些解决它的想法:

      How do you avoid over-populating the PATH Environment Variable in Windows?

      如果只需要快速让记事本再次运行,可以修改Path环境变量,将系统位置放到记事本变量的开头即可。 (例如“c:\windows\system32\notepad.exe”)。

      如果您不确定如何修改 Path 变量,这里有一个很好的方法: http://geekswithblogs.net/renso/archive/2009/10/21/how-to-set-the-windows-path-in-windows-7.aspx

      【讨论】:

      • 全新安装的Win7
      • 好的,但是这个问题仍然可能与 Path 变量有关。您可以检查您的路径变量的 notepad.exe 或在此处复制/粘贴路径变量的内容吗?如果您打开命令行并输入“记事本”会发生什么?记事本打开了吗?
      【解决方案4】:

      您是说您的代码在其他操作系统和其他文件格式中运行良好,即使在 Win 7 中也是如此。

      让我们尝试以下检查以验证事情是否正确

      1. 验证 notepad.exe 是否在路径中 开始 -> 运行 -> notepad.exe 应该会启动记事本
      2. 双击 .txt 文件,看看它是否会在记事本中自动打开
      3. 验证 Process.Start("notepad.exe") 是否启动记事本实例
      4. var process = Process.Start(file used in step 2);并在调试模式下验证返回的进程信息,看看新创建的进程是否仍在运行。

      【讨论】:

        【解决方案5】:

        这绝对是文件关联的问题。我试过windows 7,它工作正常。尝试双击文件并检查它是否在记事本中打开,如果没有,则将其配置为通过记事本打开。您还应该检查它抛出的异常, 如果缺少文件关联,它将启动 Openwith 对话框。

        如果它与错误的程序相关联,那么您可以手动更改它。

        如果您想务实地找到关联类型,我建议您查看此答案。

        How to I get file type information....

        【讨论】:

        • 不是关联问题。
        • 在这种情况下,可以发布你得到的异常。
        猜你喜欢
        • 2020-04-17
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-30
        • 2017-04-12
        相关资源
        最近更新 更多