繁体   English   中英

应该在哪里安装System.AddIn管道?

[英]Where should the System.AddIn pipeline be installed?

我有一个带有WiX安装程序的普通旧Windows窗体应用程序,它可以像所期望的那样为所有用户安装到Program Files夹。 应用程序使用System.AddIn框架托管加载项。

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

我意识到这里存在冲突的要求(用户不能弄乱其他用户的插件,需要为所有用户安装插件,所有用户都需要写入权限)但是最好的实际路线是什么?

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

我知道很久以前就问过这个问题,但......

你试过Environment.SpecialFolder.CommonApplicationData吗?

在Vista / Windows 7中,此文件夹为: %ProgramData% 我不是百分之百确定它在Windows XP中是什么,但它可能是%ALLUSERSPROFILE%

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

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

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

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

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

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

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

但我可能只是遗漏了一些东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM