我有这种方法
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
:
找不到文件
文档说,上面的代码与Windows菜单中的Run
完全相同,但显然没有。
如果我在Windows菜单的“运行”部分中写了SDCBackup
,则会启动SDCBackup.exe。
(而且SDCBackup.exe是ClickOnce安装,除了Windows本身,没有人真正知道在哪里可以找到。)
那我的代码为什么不起作用呢?
答案 0 :(得分:0)
使用
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),但我认为它也应适用于相对路径。
还要确保该文件位于debug / release文件夹(启动SDCBackup的.exe所在的任何文件夹)中,因为Windows会查找PATH
变量中包含的已知目录(例如{ {1}}等),而.NET则没有。如果它不在该文件夹中,请提供完全限定的路径,它应该可以工作。
答案 1 :(得分:0)
似乎没有人知道如何在另一个应用程序中引用ClickOnce安装的应用程序。 (向Microsoft提出了问题,那里也没有得到有用的答复。)
ClickOnce应用似乎安装在当前用户区域中的某个位置,例如:
C:\Users\[user]\AppData\Local\Apps\2.0
,然后是3个随机命名的文件夹-不同用户的文件夹名称不同;所以似乎没有办法解决这个问题。
但是我确实有一种方法可以从Microsoft创建用于Visual Studio C#解决方案的常规安装程序。
我用它来设置我的应用程序的安装路径,这样他们就可以彼此找到它并起作用。
它涉及将Installer项目添加到解决方案中。
我发现,除了解释之外,
我还发现,版本控制不是自动的。您必须手动设置版本号-为了简单起见,这是与Visual Studio使用的格式不同的格式。如果您确实设置了版本,它将自动卸载同一应用程序的先前版本。