C# 从另一个程序启动一个程序
我有这个方法C# 从另一个程序启动一个程序,c#,.net,clickonce,C#,.net,Clickonce,我有这个方法 private void StartSDCBackupSet() { using (Process p = new Process()) { p.StartInfo.FileName = "SDCBackup"; try { p.Start(); BackIcon.ShowBalloonTip(5000, "Backup", "Editor for settings startet", To
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
为true
调试显示,这是行p.Start()生成异常的代码>。异常为System.ComponentModel.Win32Exception
,消息为:
找不到文件
文档中说,上面的代码与Windows菜单中的Run
功能相同,但显然不是
如果我在Windows菜单的“运行”部分写入SDCBackup
,SDCBackup.exe将按应有的方式启动。
(而且SDCBackup.exe是一个ClickOnce安装,除了Windows本身,没有人真正知道在哪里可以找到它……)
那么为什么我的代码不起作用呢?使用
p.StartInfo.FileName = "SDCBackup.exe";
Windows测试已知的文件类型,如果是.exe(或任何其他已知类型,如.bat、msc、scr等),则运行它。据我所知.NET并没有做到这一点
您可以尝试使用Path.GetFullPath
(),但我认为它也应该适用于相对路径
还要确保该文件位于调试/发布文件夹(启动SDCBackup的.exe所在的任何文件夹)内,因为Windows会查找路径
变量中包含的已知目录(例如C:\Windows\System32
等),而.NET则不会。如果它不在该文件夹中,请提供一个完全限定的路径,它应该可以工作。似乎没有人知道如何在另一个应用程序中引用ClickOnce安装的应用程序。(在微软问了这个问题,也没有得到有用的回答。)
ClickOnce应用似乎安装在当前用户区域的某个位置,例如:
C:\Users\[user]\AppData\Local\Apps\2.0
并从那里3个随机命名的文件夹下来-和不相同的文件夹名称为不同的用户;所以似乎没有办法解决这个问题
但我确实从微软获得了一种方法,为Visual Studio C#solutions创建了一个常规安装程序
我用它来设置我的应用程序的安装路径,这样它们就可以相互找到它——并且它可以正常工作
- 安装
- 并遵循
它涉及将安装程序项目添加到解决方案中
我发现除了解释之外,
- 对于安装程序项目,您必须转到选项
- 选择**“配置管理器”
- 并将其设置为在构建时包含
我还发现,版本控制不是自动的。您必须手动设置版本号-为了简单起见,这是一种不同于VisualStudio使用的格式。如果您确实设置了版本,它将自动卸载同一应用程序的早期版本。。文件名
指的是可执行文件的完整路径或相对路径,请参阅本文()您的代码为我工作。我将一个exe文件放在项目的调试文件夹中,当执行点击p.Start()时,程序运行。除非指定完整路径,否则SDCBackup必须位于bin\debug中。依赖Environment.CurrentDirectory的值永远是错误的。今天可能不会错,雨天也会错。这是你能想象到的最糟糕的全局变量。始终使用完整路径名c:\foo\bar\file.ext。必要时(通常),使用Assembly.GetEntryAssembly().Location查找程序最终部署的位置。在Winforms应用程序中,您可以使用Application.StartupPath。Windows菜单中没有运行部分。你可能把它和搜索混淆了。@rich如果我输入calc.exe f.ex,它就可以正常工作了。但显然不是用我自己的程序,但如果我在Windows菜单的搜索中键入SDCBackup,我的程序就运行了。如果可执行文件位于本地文件夹中或可通过路径访问,它将运行。如果不是,则不会。Windows也不会查找已知目录,而是查找路径环境vairalbe中指定的目录。NET做的same@PanagiotisKanavos你完全正确。这是我编辑的地址吗?因为它错了。添加扩展名没有帮助。Windows和.NET使用相同的逻辑、相同的Windows函数来查找可执行文件—绝对位置、相对位置或路径—为什么它在Windows中运行,而不是在我的代码中运行,那么,如果它们执行相同的操作?赢7,开始-底部有一条线。我输入我的程序名,它就运行了。随便你怎么说。Windows找到该程序,.NET找不到。Qestion是为什么?您可能希望编辑您的问题,以包含提示您正在寻找的应用程序是一次点击安装。我现在在问题中看不到这一点。您可能还想添加clickonce
标记,以便该技术的专家能够看到问题。