Process.Start("IIS Manager.lnk")失败,"系统找不到指定的文件"

Bru*_*pes 2 .net c# windows

我启动路径C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\IIS Manager.lnk通过Process.Start,但它失败The system cannot find the file specified.

链接显示在a上dir,因此它存在.

可以是权限吗?

笔记:

  • 通过遍历Start Menu目录自动发现该路径.
  • 我可以通过资源管理器和命令行启动它.

澄清:

  • 代码如下:

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

  • _shortcut的类型为FileInfo

  • _shortcut.Exists为true,因此可以找到该文件
  • 用显式路径替换_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);
    }
Run Code Online (Sandbox Code Playgroud)

它似乎有点"基于环境".

第二个澄清:

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

Sat*_*iru 7

我最近碰到了这个.基于Windows Forms的解决方案,VS2013,x64机器.Process.Start()无法通过.lnk文件启动应用程序.使用进程资源管理器,似乎.lnk文件中指定的目标无法正确解析为c:\ program files(x86)...而不是c:\ program files ...我遵循了Bruno的出色建议,但后来又是我的目标已被标记为"AnyCPU".

经过一番搔痒,结果发现VS11 +中有一个名为"Prefer 32-bit"的新编译器标志,默认情况下已经检查过.即使我的操作系统是64位且平台设置为AnyCPU,这也迫使EXE输出为32位.在取消选中并重新编译后,问题得到解决.

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


Bru*_*pes 6

发现了这个问题.

WPF应用程序编译为x86(所有其他dll编译为AnyCPU),并且在64位计算机中启动某些可执行文件或链接时失败.

将"平台目标"更改为AnyCPU可以解决此问题.