.net System.AddIn管道应安装在何处?

.net System.AddIn管道应安装在何处?,.net,installation,wix,add-in,.net,Installation,Wix,Add In,我有一个带有WiX安装程序的普通旧Windows窗体应用程序,它是为所有用户安装到程序文件文件夹的,正如您所期望的那样。应用程序使用托管外接程序 由于System.AddIn框架需要写入某些加载项管道文件夹(加载项,加载项适配器,加载项视图,合同和主机侧适配器),我不知道安装加载项的最佳位置。我无法安装到程序文件,因为用户没有写入权限,如果我安装到用户的应用程序数据文件夹,则不会为任何其他用户安装加载项 我意识到这里有相互冲突的要求(用户不能干扰其他用户的外接程序,需要为所有用户安装外接程序,并

我有一个带有WiX安装程序的普通旧Windows窗体应用程序,它是为所有用户安装到
程序文件
文件夹的,正如您所期望的那样。应用程序使用托管外接程序

由于System.AddIn框架需要写入某些加载项管道文件夹(
加载项
加载项适配器
加载项视图
合同
主机侧适配器
),我不知道安装加载项的最佳位置。我无法安装到
程序文件
,因为用户没有写入权限,如果我安装到用户的
应用程序数据
文件夹,则不会为任何其他用户安装加载项

我意识到这里有相互冲突的要求(用户不能干扰其他用户的外接程序,需要为所有用户安装外接程序,并且所有用户都需要写入权限),但最佳的实际途径是什么

遗憾的是,System.AddIn framework需要编写的文件不能单独存储在
应用程序数据中,但这似乎是该框架的一个限制。

Uhh,您不能同时拥有“所有用户”和“无提升”。我不太清楚System.AddIn框架是什么,但是如果它是从用户进程运行的(aka:不是像进程这样的系统服务),那么它必须写在用户配置文件下(ApplicationDataFolder是一个很好的地方)。这是所有应用程序都必须遵循的一条非常基本的规则。根据我对您评论的有限理解,听起来System.AddIn框架正在打破这一规则


但我可能只是错过了一些东西

仍然希望得到更好的答案,但我认为唯一的方法是在每次运行应用程序时将管道安装到程序文件并复制到应用程序数据。然后将System.AddIn framework指向应用程序数据中的管道副本,这样它只会尝试写入用户配置文件。

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


这也将绕过可写文件夹的限制

我知道这个问题很久以前就被问过了,但是

您是否尝试过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);

我认为我们错过了同样的事情,因此我提出了问题我认为你的方法是正确的。只要没有现有的外接程序,就将“默认”外接程序复制到用户的应用程序数据中。如果每个用户都安装了Windows Installer,则同样适用于Windows Installer,但这不是我想要的。