更改.Net Windows应用程序的i18n资源路径

时间:2010-06-17 20:12:42

标签: .net winforms internationalization

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

修改:我知道< probing>配置参数(http://msdn.microsoft.com/en-us/library/823z9h8w.aspx),但它只能用于指定应用程序基本路径的子目录。有没有办法强制它到应用程序主页之外的文件夹?

编辑:我想我可能会使用AppDomain.AssemblyResolve事件来查找适当的资源,但是在.Net 4之前不会为资源程序集调用它而我不能让用户更新到该版本。

谢谢,
吉列尔莫

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我终于成功地创建了一个从应用程序文件夹下的子目录(用户)到用户文件夹中的目录的联结文件夹链接。然后我在assemblyBinding标记下的app.config中添加了以下行:

<probing privatePath=".;user" />

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