代码之家  ›  专栏  ›  技术社区  ›  Guillermo Vasconcelos

更改.NET Windows应用程序的I18N资源路径

  •  0
  • Guillermo Vasconcelos  · 技术社区  · 16 年前

    我们正在将.NET Windows应用程序迁移到Windows 7。此应用程序可以使用多种语言,但默认情况下只安装英语。有一个菜单项允许用户下载其他语言。
    此应用程序正在使用标准.NET Satellite Resources文件夹组织: http://msdn.microsoft.com/en-us/library/sb6a8618%28v=VS.80%29.aspx .
    Windows7中的问题是用户不是管理员,并且对安装应用程序的“ProgramFiles”文件夹没有写访问权限。这意味着当用户尝试下载新的语言资源文件时,他们会收到一个错误。
    有没有方法指导.NET在另一个文件夹中查找资源文件,例如在用户的主目录中查找资源文件? 我知道您可以将资源添加到.NET全局程序集缓存,但您还需要管理员权限。

    编辑 :我知道<探测>配置参数( http://msdn.microsoft.com/en-us/library/823z9h8w.aspx ,但它只能用于指定应用程序基路径的子目录。有没有一种方法可以将其强制保存到应用程序主目录之外的文件夹中?

    编辑 :我想我可能可以使用AppDomain.AssemblyResolve事件来查找合适的资源,但对于.NET 4之前的资源程序集不会调用它,而且我还不能让用户更新到该版本。

    谢谢,
    吉列尔莫

    2 回复  |  直到 16 年前
        1
  •  0
  •   Oded    16 年前

    net有一个 SpecialDirectories 类,可用于访问目录,如当前用户应用程序数据目录(通过 CurrentUserApplicationData 成员)。

    您可以在没有管理员权限的情况下写入此目录,不过我会确保在其中为您的应用程序创建一个唯一的目录结构。

        2
  •  0
  •   Guillermo Vasconcelos    16 年前

    我最终设法让它工作,创建一个从应用程序文件夹下的子目录(用户)到用户文件夹中的目录的连接文件夹链接。然后我在app.config的assemblybinding标记下添加了以下行:

    <probing privatePath=".;user" />
    

    应用程序将资源文件写入用户的文件夹中,应用程序将访问这些文件,就像它们在正确的路径中一样。
    这不是最优雅的解决方案,但它起作用。

    推荐文章