我是通过C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\IIS Manager.lnk
启动路径Process.Start
,但是The system cannot find the file specified
失败了。
该链接显示在dir
上,因此存在。
可以是权限吗?
注意:
Start Menu
目录自动发现路径。澄清:
代码如下:
public void Execute(){Process.Start(_shortcut.FullName);}
_shortcut的类型为FileInfo
另一方面,这似乎有效:
[Fact]
public void TestIisManager()
{
var path = new FileInfo(@"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\IIS Manager.lnk");
Process.Start(path.FullName);
}
它似乎有点“基于环境”。
第二次澄清:
答案 0 :(得分:7)
我最近碰到了这个。基于Windows Forms的解决方案,VS2013,x64机器。 Process.Start()无法通过.lnk文件启动应用程序。使用进程资源管理器,似乎.lnk文件中指定的目标无法正确解析为c:\ program files(x86)...而不是c:\ program files ...我遵循了Bruno的出色建议,但是我的目标已经被标记为" AnyCPU"。
经过一番搔痒,结果发现VS11 +中有一个名为"首选32位" 的新编译器标志,默认情况下已经检查过。即使我的操作系统是64位且平台设置为AnyCPU,这也迫使EXE输出为32位。在我取消选中并重新编译之后,问题就解决了。
答案 1 :(得分:6)
发现了这个问题。
WPF应用程序编译为x86(所有其他dll编译为AnyCPU),并且在64位计算机中启动某些可执行文件或链接时失败。
将“平台目标”更改为AnyCPU可解决此问题。
答案 2 :(得分:2)
这实际上可能与您的情况无关,但您可以使用
启动IIS管理器Process.Start("inetmgr.exe")
如果您想继续使用快捷方式,如果您使用ProcessStartInfo
启动流程并将ProcessStartInfo.UseShellExecute
设置为true
答案 3 :(得分:1)
你能确保从STA线程尝试这个吗?如果以下示例成功,您可以查看公寓状态是否有问题:
using System;
using System.Diagnostics;
public class Program
{
// make sure to call Process.Start from an STA thread
[STAThread]
static void Main(string[] args)
{
Process.Start(@"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\IIS Manager.lnk");
}
}
Process.Start
调用ShellExecute
来运行传递的文件。正如Raymond Chen所描述的,shell函数需要一个STA线程:
答案 4 :(得分:0)
这有点像黑客,但尝试启动它:
string path = @"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\IIS Manager.lnk";
Process.Start("cmd.exe", String.Format("/k \"\"{0}\"\"",path));
请注意保存路径中的空格所需的 double 引号。 这样,您可能会在命令环境中看到更准确的错误消息和/或随后走动以查看路径的错误。