【问题标题】:How to use ShowHelp with Vista's virtualized "Program Files" folder如何在 Vista 的虚拟化“程序文件”文件夹中使用 ShowHelp
【发布时间】:2010-04-16 13:51:25
【问题描述】:

如果帮助文件的路径名包含虚拟化文件夹名称,我们会遇到在 Vista 和 Windows Server 2008 下 ShowHelp 似乎失败的问题。 例如,在德文版 Vista 下,“Program Files”被称为“Programme”。 来电

System.Windows.Forms.Help.ShowHelp(null, 
   @"C:\Programme\Microsoft Visual Studio 9.0\Common7\Tools\spyxx.chm");

失败,而

System.Windows.Forms.Help.ShowHelp(null,
   @"C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\spyxx.chm");

成功了。

如果在 C# 中有任何方法可以将文件路径转换为其非虚拟化对应项?

或者还有其他解决方案吗?

问候

【问题讨论】:

    标签: c# chm


    【解决方案1】:

    它失败是因为 C:\Programme 不是真正的文件夹 - 它只是一个显示的名称。在 Vista 和 7 上,这些文件夹总是有英文名称,而与操作系统语言无关。

    正确的方法是查看注册表并查看它的安装位置。在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0 中查找 InstallDir 键。这将类似于 c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\ 如果你有 - 然后你可以操纵这个路径来访问 Common7\Tools。

    换句话说,就是不要硬编码路径。

    如果您必须知道 Program Files 文件夹的名称,use GetFolderPath with the appropriate parameter 而不是硬编码。

    【讨论】:

    • 上面的“Visual Studio”路径名实际上只是一个例子,以表明问题不是我们帮助文件中的错误。我们的程序是免安装的(即您只需将其复制到目标文件夹中)。因此,我们不能使用注册表来确定安装位置。我们必须依靠 Assembly.Location 或类似的方法来获取安装位置;这些方法总是返回“程序”而不是“程序文件”。
    • @fmunkert:我无法重现这种行为。创建一个测试应用程序并打印 Assembly.GetExecutingAssembly().Location 为我提供英文名称,而不是资源管理器中显示的本地化名称 - 它应该,因为您应该在使用 Windows API 时使用想要显示本地化名称而不是真实名称。
    猜你喜欢
    • 2010-10-23
    • 2010-10-26
    • 2011-03-26
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2013-01-17
    相关资源
    最近更新 更多