繁体   English   中英

UnauthorizedAccessException:对路径的访问被拒绝

[英]UnauthorizedAccessException: Access to the path is denied

作为使用Wix 3.XX的服务安装程序的一部分,我们一直在尝试加密连接字符串。 在访问了 Stackoverflow 和其他一些社区上的几个选项之后,我们选择了分三部分进行。

  1. 在第一部分安装服务的安装程序
  2. 在安装结束时,它调用选择现有配置连接位置的小型可执行文件,加密安装文件夹内的连接字符串并保存该配置。
  3. 一个.bat文件,用于清除加密的可执行文件(基本上不留下任何痕迹)

所有三个部分都可以很好地协调,但是当我尝试使用非提升权限(非管理员模式)将其安装在“程序文件”或“程序文件(x86) ”中时,加密可执行文件失败。

调试给我留下了痕迹,这意味着安装程序对任何此类进程都未经授权。

这是执行此操作的代码片段:

1. var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = configPath };
2. var configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
3. var section = configuration.GetSection(sectionToEncrypt);
4. section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
5. section.SectionInformation.ForceSave = true;
6. configuration.Save(ConfigurationSaveMode.Modified);

到达第 6 行,它返回一个错误:

System.Configuration.ConfigurationErrorsException
HResult=0x80131902
Inner Exception 1: 
UnauthorizedAccessException: 
Access to the path 'C:\Program Files (x86)\<AppDirectory>\5tkbxj1v.tmp' is denied.

对此的任何投入都将是亲切的。

在此先感谢您的帮助!

不应修改 Program Files 文件夹中的文件,如果您的配置文件不能对所有安装都是静态的,则应将它们放在其他文件夹中,如AppData

只有InstallInitializeInstallFinalize之间的InstallExecuteSequence子部分运行提升。 设置的其余部分具有普通用户权限,除非整个 MSI 已从已提升的cmd.exe提示符启动。

MSI 中的标准操作运行提升,但对于自定义操作,仅延迟模式自定义操作在具有提升权限的系统上下文中运行而无需模拟运行 它们只能存在于 InstallInitialize 和 InstallFinalize 之间。

在 InstallFinalize 之后插入立即模式自定义操作尝试在“特权位置”中“调整”系统是一个非常常见的错误。 在安全环境中或在没有完全管理员权限的情况下运行安装程序时,这将始终失败。 即使您将有问题的文件的 ACL 设置为标准用户可写,在企业部署期间由于几个非常技术性的原因,它往往会失败。

您是否在 GUI 中检索用户的连接字符串? 您应该能够在立即模式下使用 DLL 自定义操作对从用户检索到的数据进行加密,然后使用延迟模式自定义操作写入配置文件 - 当您具有提升的权限时。 一点也不微不足道,但可能。

请提供一些评论,以便我们更多地了解您在做什么,我会看看是否可以找到延迟模式自定义操作的好链接。


一些相关链接

如果问题实际上是由在非管理员模式下运行的小的可执行文件所引起,可以通过设置解决这个requestedExecutionLevelrequireAdministrator在其应用程序清单(app.manifest)。

是一个分步示例。

当安装程序启动可执行文件时,会显示 UAC 提示,用户可以输入有效的管理员凭据来评估进程的权限。

冒着重复其他一些答案的风险:

  1. 您必须运行提升才能在 Program Files 文件夹中修改或创建数据。 这没什么新鲜的,但显然这意味着你的程序没有提升。 仅当标记为延迟时,它才会提升运行。

  2. 在您的第 3 步中,通常不需要使用 bat 文件来清理您的残留程序。 您可以将它作为来自二进制表的自定义操作运行,因此 Windows 将输出、运行它并在您之后进行清理。 请注意,如果您将该可执行文件安装为文件并将其删除,那么您应该假设修复或升级需要原始 MSI 重新安装它。 作为测试,删除该文件,然后修复产品并查看文件是否已恢复。

作为完整性检查,您应该发布与自定义操作及其调用位置相关的 WiX 源。 通常情况下,问题不在于代码,而在于它运行的环境。

打开 wix 尝试安装的项目的项目属性

安检

并将安全设置设置为

在此处输入图片说明

暂无
暂无

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

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