Process.Start() 立即退出 Windows 7
Process.Start() exits right away on Windows 7
Process.Start("d:/test.txt"); //simple .txt file
在 Windows 8 之后工作得很好,但在 Windows 7 (x64) 上它启动进程并立即关闭它。
我已经尝试过以下方法:
通过 ProcessStartInfo
调用并设置 CreateNoWindow=true
、UseShellExecute=true
和 Verb="runas"
(虽然不确定为什么我必须设置这个)。
尝试附加 Exit
事件,它确认进程确实开始但它立即退出,我什至没有看到记事本 window 打开一眨眼一秒.
编辑: 我已经用图像文件和其他几个扩展试过了,它们打开得非常好。只有 .txt 文件有问题(and/or 可能是其他格式)。
绝对是文件关联的问题。我已经试过了 windows 7,效果很好。尝试双击文件并检查它是否在记事本中打开,如果没有然后将其配置为通过 notepad.Also 打开你应该检查它抛出的异常,
如果缺少文件关联,它将启动“打开方式”对话框。
如果它与错误的程序相关联,那么您可以手动更改它。
如果你想实用地找到关联类型,我建议你看看这个答案。
How to I get file type information....
您是说您的代码在其他 OS 和其他文件格式中运行良好,即使在 Win 7 中也是如此。
让我们尝试进行以下检查以验证一切是否正确
- 验证 notepad.exe 是否在路径中
开始 -> 运行 -> notepad.exe 应该启动记事本
- 双击 .txt 文件并查看它是否会自动在记事本中打开
- 验证 Process.Start("notepad.exe") 是否启动记事本实例
- var 进程 = Process.Start(
file used in step 2
);并在调试模式下验证返回的进程信息,看看是否说新创建的进程仍然是运行。
我之前在 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
只用
怎么样
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/
我能够通过将构建平台从 AnyCPU 更改为特定的 x64(我的目标机器是 x64)来解决这个错误。这很奇怪,但它解决了问题!感谢 Simon Mourier 提供此提示。
Process.Start("d:/test.txt"); //simple .txt file
在 Windows 8 之后工作得很好,但在 Windows 7 (x64) 上它启动进程并立即关闭它。
我已经尝试过以下方法:
通过
ProcessStartInfo
调用并设置CreateNoWindow=true
、UseShellExecute=true
和Verb="runas"
(虽然不确定为什么我必须设置这个)。尝试附加
Exit
事件,它确认进程确实开始但它立即退出,我什至没有看到记事本 window 打开一眨眼一秒.
编辑: 我已经用图像文件和其他几个扩展试过了,它们打开得非常好。只有 .txt 文件有问题(and/or 可能是其他格式)。
绝对是文件关联的问题。我已经试过了 windows 7,效果很好。尝试双击文件并检查它是否在记事本中打开,如果没有然后将其配置为通过 notepad.Also 打开你应该检查它抛出的异常, 如果缺少文件关联,它将启动“打开方式”对话框。
如果它与错误的程序相关联,那么您可以手动更改它。
如果你想实用地找到关联类型,我建议你看看这个答案。
How to I get file type information....
您是说您的代码在其他 OS 和其他文件格式中运行良好,即使在 Win 7 中也是如此。
让我们尝试进行以下检查以验证一切是否正确
- 验证 notepad.exe 是否在路径中 开始 -> 运行 -> notepad.exe 应该启动记事本
- 双击 .txt 文件并查看它是否会自动在记事本中打开
- 验证 Process.Start("notepad.exe") 是否启动记事本实例
- var 进程 = Process.Start(
file used in step 2
);并在调试模式下验证返回的进程信息,看看是否说新创建的进程仍然是运行。
我之前在 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
只用
怎么样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/
我能够通过将构建平台从 AnyCPU 更改为特定的 x64(我的目标机器是 x64)来解决这个错误。这很奇怪,但它解决了问题!感谢 Simon Mourier 提供此提示。