2009-04-29 80 views
4

我有一个带有WiX安装程序的普通旧式Windows Forms应用程序,并且它可以像您期望的那样安装在Program Files文件夹中的所有用户。应用程序使用System.AddIn framework托管加载项。System.AddIn管道应该安装在哪里?

因为System.AddIn框架需要写一些外接管线文件夹(AddInsAddInSideAdaptersAddInViewsContractsHostSideAdapters)我不知道安装的加载项的最佳场所。我无法安装到Program Files,因为用户将没有写入权限,并且如果我安装到用户的Application Data文件夹,则不会为任何其他用户安装加载项。

我意识到这里存在相互矛盾的要求(用户不能混淆其他用户的加载项,需要为所有用户安装加载项,并且所有用户都需要写入权限),但什么是最好的切实可行的路线?

很遗憾,System.AddIn框架需要编写的文件不能单独存储在Application Data中,但这似乎是框架的限制。

回答

2

我知道这个问题被问得很久以前,但...

你试过Environment.SpecialFolder.CommonApplicationData?

在Vista/Windows 7中,此文件夹是:%ProgramData%。我不是100%确定它在Windows XP中的含义,但它可能是%ALLUSERSPROFILE%

在任何情况下,该文件夹应具有读/写权限,并且对所有用户都是相同的。

不要忘了创建子文件夹为您的公司/应用程序名称:

string companyName = "My Company"; 
string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData); 
string path = Path.Combine(folderPath, companyName); 
0

呃,你不能同时拥有“所有用户”和“没有海拔”。我不完全知道System.AddIn框架是什么,但是如果它打算从用户进程(又名:不是系统服务,如进程)运行,那么它必须在用户配置文件下编写(ApplicationDataFolder是一个很好的地方) 。这是所有应用程序必须遵循的非常基本的规则。基于我对你评论的理解有限,听起来像System.AddIn框架正在打破这一规则。

但我可能只是失去了一些东西。

+0

我认为我们缺少同样的事情,因此我的问题。 :) – GraemeF 2009-05-01 14:10:48

1

仍然希望得到更好的答案,但我认为唯一的方法就是将管道安装到程序文件并在每次运行应用程序时复制到应用程序数据。然后,您可以将System.AddIn框架指向Application Data中的管道副本,以便仅尝试写入用户配置文件。

+0

我认为你的方法是正确的。只要没有现有的AddIns,就可以将“默认”AddIns复制到用户的应用程序数据中。 – VVS 2009-05-25 20:57:26

0

您是否需要使用WiX安装程序?将您的应用程序部署为clickonce解决方案将会将所有管道放入用户应用程序数据文件夹中。这样每个用户都可以保留自己的模块列表。

这也将解决可写文件夹限制。

+0

如果每个用户安装它,Windows安装程序也是如此,但那不是我要找的。 – GraemeF 2010-08-25 15:00:49