【问题标题】:Starting application with shortcuts (%PROGRAMFILES%) being used使用正在使用的快捷方式 (%PROGRAMFILES%) 启动应用程序
【发布时间】:2014-09-06 13:42:06
【问题描述】:

我想知道在使用 System.Diagnostics.Process.Start 时有什么方法可以使用普通的快捷方式窗体窗口,例如 %PROGRAMFILES%, %APPDATA%,....

我想要做的是使用这些快捷方式之一来动态创建用于启动我想用 Process.Start 启动的程序的路径。 示例:

System.Diagnostics.Process.Start("%PROGRAMFILES%\MyApp\MyApp.exe");

编辑:作为对已接受答案的评论:

由于 cmets 中提到了一件重要的事情,我还想把它放在这里: 如果解决方案由于找不到文件而不起作用,则应打印出 System.Environment.ExpandEnvironmentVariables 命令的结果。它可能无意中指向 x86 程序文件位置而不是程序文件位置(反之亦然),具体取决于应用程序本身(项目属性)是否相应地设置了“首选 32 位”或平台目标。如果牢记这一点,该解决方案将非常有效。

【问题讨论】:

    标签: c#


    【解决方案1】:

    先使用System.Environment.ExpandEnvironmentVariables进行展开,然后将结果传递给Process.Start

    System.Diagnostics.Process.Start(
        System.Environment.ExpandEnvironmentVariables(@"%PROGRAMFILES%\MyApp\MyApp.exe"));
    

    【讨论】:

    • 试过了,但没用(尝试了我在 Windows 资源管理器中使用的相同字符串并有效)
    • 不知道该说什么——而且我不知道“没用”是什么意思——ExpandEnvironmentVariables 对我有用。您确定它指向 right 程序文件文件夹(即您是否在需要 64 位文件夹的地方运行此 32 位)?
    • 有趣。 Yepp 只是确保它在正确的文件夹中。使用:System.Diagnostics.Process.Start(System.Environment.ExpandEnvironmentVariables(@"%PROGRAMFILES%\CompanyName\MyApp\AppClient\MyApp.GUI.exe"));然后它说“系统找不到文件”(将错误翻译成英文,所以英文版本可能会有所不同)。该文件本身位于 Progams\CompanyName\MyApp\AppClient 文件夹中。
    • 调用Environment.ExpandEnvironmentVariables的结果是什么?
    • @ThomasE。好吧,一种方法是让您的应用程序运行 64 位 :)
    【解决方案2】:

    我几乎可以肯定这不起作用,但是,.NET 库中有一个环境类可以返回您正在寻找的信息。

    大概是这样的:

    // Change the directory to %WINDIR%                         
    Environment.CurrentDirectory = Environment.GetEnvironmentVariable("windir");        
    

    如果您改用“程序文件”,它可能会起作用(此处无法检查)。

    【讨论】:

      【解决方案3】:

      你可以使用

      Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86)`
      

      获取特殊文件夹的路径(在本例中为 32 位程序文件目录)。该课程中还有更多内容会有所帮助。

      另外,如果您使用 UseShellExecute,我希望带有非扩展路径的 Process.Start 可以正常工作 - shell 能够自行扩展路径。

      但是,这仍然可能是一个糟糕的解决方案。如果用户在其他地方安装了您的目标应用程序怎么办?您确定没有更好的方法来获取应用程序的路径吗?

      【讨论】:

      • UseShell 导致了我上面在 expandenvironmentvariables 答案中提到的相同错误。会不会是因为我不在英语环境中(因此是非英语窗口)而无法正常工作?
      猜你喜欢
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2012-10-29
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多