我有一个普通的带有WiX安装程序的Windows Forms应用程序,正如您所期望的那样,它为所有用户安装到Program Files文件夹中。应用程序使用System.AddIn framework托管外接程序。
因为System.AddIn框架需要写入一些插件管道文件夹(AddIns、AddInSideAdapters、AddInViews、Contracts和HostSideAdapters),所以我不知道安装插件的最佳位置。我无法安装到Program Files,因为用户没有写入权限,如果我安装到用户的Application Data文件夹,则不会为任何其他用户安装外接程序。
我意识到这里有相互冲突的要求(用户不能搞乱其他用户的插件,插件需要为所有用户安装,所有用户都需要权限才能写入),但最好的实际方法是什么?
遗憾的是,不能在Application Data中单独存储System.AddIn框架需要编写的文件,但这似乎是该框架的一个限制。
发布于 2011-03-17 05:55:25
我知道这个问题很久以前就有人问过了,但是...
你试过Environment.SpecialFolder.CommonApplicationData?吗?
在Vista/Windows7中,这个文件夹是:%ProgramData%。我不能100%确定它在Windows XP中是什么,但它很可能是%ALLUSERSPROFILE%。
在任何情况下,此文件夹都应具有读/写权限,并且对所有用户都是相同的。
不要忘记为您的公司/应用程序名称创建子文件夹:
string companyName = "My Company";
string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string path = Path.Combine(folderPath, companyName);发布于 2009-05-01 20:09:24
我仍然希望得到一个更好的答案,但我认为唯一的方法是在每次应用程序运行时将管道安装到Program Files并复制到Application Data。然后,您可以将System.AddIn框架指向应用程序数据中的管道副本,以便它只尝试写入用户配置文件。
发布于 2009-04-30 14:35:01
嗯,你不能同时拥有“所有用户”和“无提升”。我不确切地知道System.AddIn框架是什么,但如果它打算从用户进程(也就是:不是像进程那样的系统服务)运行,那么它必须在用户配置文件(ApplicationDataFolder是一个很好的地方)下编写。这是所有应用程序都必须遵循的一个非常基本的规则。根据我对您的评论的有限理解,听起来System.AddIn框架正在打破这条规则。
但我可能只是遗漏了什么。
https://stackoverflow.com/questions/801579
复制相似问题