c# - Process.Start ("IIS Manager.lnk") 失败,返回 "The system cannot find the file specified"

标签 c# .net windows

我正在通过 Process.Start 启动路径 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\IIS Manager.lnk,但是它失败并显示 系统找不到指定的文件

链接显示在 dir 中,因此它存在。

可以是权限吗?

注意事项:

  • 路径是通过遍历 开始菜单 目录自动发现的。
  • 我可以通过资源管理器和命令行启动它。

说明:

  • 代码如下:

    public void Execute() { Process.Start(_shortcut.FullName);

  • _shortcut 是 FileInfo 类型

  • _shortcut.Exists为真,所以可以找到文件
  • 将 _shortcut.FullName 替换为显式路径 @"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\IIS Manager.lnk"具有相同的效果。
  • 这是一个使用 Caliburn 和 MEF 的 WPF 应用程序。
  • 以管理员身份运行具有相同的效果。

另一方面,这在这里似乎有效:

    [Fact]
    public void TestIisManager()
    {
        var path = new FileInfo(@"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\IIS Manager.lnk");
        Process.Start(path.FullName);
    }

它似乎确实有点基于“环境”。

第二次澄清:

  • 它似乎适用于 Windows 7 x86,但不适用于 Windows 7 x64。

最佳答案

我最近遇到了这个。基于 Windows 窗体的解决方案,VS2013,x64 机器。 Process.Start() 无法通过 .lnk 文件启动应用程序。使用 Process Explorer,似乎 .lnk 文件中指定的目标被错误地解析为 c:\program files (x86)... 而不是 c:\program files...目标已标记为“AnyCPU”。

经过一番摸索之后,发现 VS11+ 中有一个名为 “Prefer 32-bit” 的新编译器标志,默认情况下已选中。这迫使 EXE 输出为 32 位,即使我的操作系统是 64 位并且平台设置为 AnyCPU。取消勾选后重新编译,问题解决。

更多阅读:http://blogs.microsoft.co.il/sasha/2012/04/04/what-anycpu-really-means-as-of-net-45-and-visual-studio-11/

关于c# - Process.Start ("IIS Manager.lnk") 失败,返回 "The system cannot find the file specified",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4193463/

相关文章:

.net - 使用 ITextSharp 和 PDFSharp 渲染 PDF 表的性能 Not Acceptable

c++ - 使用 node-gyp 编译时 CFLAGS 在 Windows 上不起作用

c# - 为具有速率限制和缓存的 ASP.NET MVC 站点创建 API

c# - 反射说接口(interface)方法在实现类型中是虚拟的,而实际上它们不是?

c# - 消除字符串中 "insignificant"重复字符的最简单方法

.net - 是否有 "standard"方法来实现 .NET 的软件激活?

c++ - 将静态库转换为DLL导致main之前的访问冲突

c++ - 关于调用约定的问题

c# - 静态方法更有效吗?

c# - 如果字符串包含特定字符则数据触发