Process.Start()立即退出Windows 7

时间:2017-05-21 20:17:17

标签: c# windows-7 process.start

Process.Start("d:/test.txt"); //simple .txt file在Windows 8上完全正常,但在Windows 7(x64)上,它会启动该过程并立即将其关闭。

我已经尝试了以下内容:

  1. 致电ProcessStartInfo并设置CreateNoWindow=trueUseShellExecute=trueVerb="runas"(虽然不确定我为何必须设置此内容)。

    < / LI>
  2. 尝试附加Exit事件并确认进程确实已启动,但它会立即退出,我甚至不会看到记事本窗口打开一秒钟。

  3. 修改:我已尝试使用图像文件和其他一些扩展程序,它们打开就完美了。只有.txt文件(和/或可能是其他格式)有问题。

5 个答案:

答案 0 :(得分:0)

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

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

如果你想以实用的方式找到关联类型,我建议你看看这个答案。

How to I get file type information....

答案 1 :(得分:0)

你说你的代码在其他操作系统和其他文件格式中工作正常,即使在Win 7中也是如此。

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

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

答案 2 :(得分:0)

之前我曾在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

答案 3 :(得分:0)

如何使用

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/

答案 4 :(得分:0)

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