我有这个方法
private void StartSDCBackupSet() {
using (Process p = new Process()) {
p.StartInfo.FileName = "SDCBackup";
try {
p.Start();
BackIcon.ShowBalloonTip(5000, "Backup", "Editor for settings startet", ToolTipIcon.Info);
} catch (Exception) {
MessageBox.Show("Program til settings blev ikke fundet");
}
}
}
根据我能找到的文档——这里有很多答案——它应该启动另一个程序——SDCBackup.exe。
事实并非如此。而且我已经尝试将 .exe 添加到文件名中,但这并没有什么不同。我收到带有消息的消息框...
我检查了 p
和 StartInfo
,一切正常。 StartInfo.UseShellExecute
为真。
调试显示,是 p.Start();
行产生了异常。异常是一个 System.ComponentModel.Win32Exception
消息:
File not found
文档说,上面的代码与 Windows 菜单中的 Run
执行相同的操作,但显然不是。
如果我在 Windows 菜单的运行部分写入 SDCBackup
,SDCBackup.exe 将正常启动。
(并且 SDCBackup.exe 是一个 ClickOnce 安装,没有人真正知道在哪里可以找到 - 除了 Windows 本身......)
那么为什么我的代码不能解决问题?
最佳答案
使用
p.StartInfo.FileName = "SDCBackup.exe";
Windows 会测试已知的文件类型,如果它是 .exe(或任何其他已知类型,例如 .bat、msc、scr 等),它就会运行它。据我所知,.NET 不会那样做。
您可以尝试使用 Path.GetFullPath
( https://msdn.microsoft.com/de-de/library/system.io.path.getfullpath(v=vs.110).aspx ),但我认为它也应该适用于相对路径。
还要确保该文件位于您的调试/发布文件夹中(启动 SDCBackup 的 .exe 所在的任何文件夹),因为 Windows 会查找包含在 PATH
变量中的已知目录(例如 C:\windows\System32
等),而 .NET 则没有。如果它不在该文件夹中,请提供一个完全限定的路径,它应该可以工作。
关于C# 从另一个程序启动一个程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327314/