作为使用 Wix 3.XX 的服务安装程序的一部分,我们一直在尝试加密连接字符串。 在访问了 Stackoverflow 和其他一些社区的几个选项后,我们选择分三部分进行。
- 在第一部分安装服务的安装程序
- 在安装结束时,它会调用小型可执行文件来选择现有配置的连接位置,加密安装文件夹中的连接字符串并保存该配置。
- 一个
.bat
文件,用于清除加密的可执行文件(基本上不留下任何痕迹)
这三个部分配合得很好,但是当我尝试将其安装在“Program Files”或“Program Files (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.
对此的任何输入都将是亲切的。
在此先感谢您的帮助!
最佳答案
Only the sub-section of the
InstallExecuteSequence
betweenInstallInitialize
andInstallFinalize
runs elevated. The rest of the setup has normal user rights, unless the whole MSI has been launched from an already elevatedcmd.exe
prompt.
MSI 中的标准操作运行提升,但关于自定义操作只有延迟模式自定义操作在没有模拟的情况下在系统上下文中以提升的权限运行。它们只能存在于 InstallInitialize 和 InstallFinalize 之间。
在 InstallFinalize 之后插入即时模式自定义操作是一个非常常见的错误,试图在“特权位置”“调整”系统。这在安全环境中或在没有完全管理员权限的情况下运行安装程序时总是会失败。即使您将相关文件的 ACL 设置为标准用户可写,在企业部署期间它也往往会因几个非常技术性的原因而失败。
您是否在 GUI 中从用户处检索连接字符串?您应该能够在立即模式下使用 DLL 自定义操作加密从用户检索的数据,然后使用延迟模式自定义操作写入配置文件 - 当您具有提升的权限时。一点也不微不足道,但有可能。
请提供一些评论,以便我们更多地了解您在做什么,我会看看是否可以为延迟模式自定义操作找到一个好的链接。
一些相关链接:
关于c# - 未经授权的访问异常 : Access to the path is denied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51036732/