4

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

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

我意识到这里有冲突的要求(用户不能乱用其他用户的加载项,加载项需要为所有用户安装,所有用户都需要写入权限)但是最好的实用途径是什么?

可惜System.AddIn框架需要写的文件不能单独存放在里面Application Data,但这似乎是框架的限制。

4

4 回答 4

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);
于 2011-03-16T21:55:24.893 回答
1

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

于 2009-05-01T20:09:24.340 回答
0

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

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

于 2009-04-30T14:35:01.470 回答
0

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

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

于 2010-08-24T00:48:11.520 回答