gpt4 book ai didi

C# 从另一个程序启动一个程序

转载 作者:太空狗 更新时间:2023-10-29 23:49:16 27 4
gpt4 key购买 nike

我有这个方法

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 添加到文件名中,但这并没有什么不同。我收到带有消息的消息框...我检查了 pStartInfo,一切正常。 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com