作为使用Wix 3.XX的服务安装程序的一部分,我们一直在尝试加密连接字符串。
在访问了Stackoverflow和其他一些社区的几个选项之后,我们选择分三部分来做。
在第一部分中安装服务的安装程序
在安装结束时,它将调用小型可执行文件,该可执行文件选择现有配置的连接位置,对安装文件夹内的连接字符串进行加密,然后保存该配置。.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.
任何对此的投入将是客气的。
在此先感谢您的帮助!
最佳答案
仅InstallExecuteSequence
和InstallInitialize
之间InstallFinalize
的子部分升高。除非已从已经提升的cmd.exe
提示符启动了整个MSI,否则其余的设置都具有正常的用户权限。
MSI中的标准操作运行较高,但是对于自定义操作,仅延迟模式的自定义操作在没有模拟的情况下在具有提升权限的系统上下文中运行。它们只能存在于InstallInitialize和InstallFinalize之间。
在InstallFinalize之后插入立即模式自定义操作,这是一个非常常见的错误,该操作试图在“特权位置”中“调整”系统。在安全环境中或在没有完全管理员权限的情况下运行安装程序时,这将始终失败。即使将相关文件的ACL设置为可由标准用户写入,但由于多种非常技术性的原因,它在公司部署过程中也会失败。
您是否正在从GUI中从用户检索连接字符串?您应该能够在即时模式下使用DLL自定义操作对从用户检索的数据进行加密,然后在拥有提升权限的情况下使用延迟模式自定义操作写入配置文件。一点也不琐碎,但可能。
请提供一些评论,以便我们对您的工作有更多的了解,我将看看是否可以找到有关延迟模式自定义操作的良好链接。
一些相关链接:
System.UnauthorizedAccessException while running .exe under program files
关于c# - UnauthorizedAccessException:拒绝访问路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51036732/