【问题标题】:UnauthorizedAccessException: Access to the path is deniedUnauthorizedAccessException:对路径的访问被拒绝
【发布时间】:2018-06-26 07:02:14
【问题描述】:

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

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

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

调试给了我痕迹,这意味着安装程序未经授权可以执行任何此类进程。

这是执行此操作的代码 sn-p:

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.

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

提前感谢您的帮助!

【问题讨论】:

标签: c# .net wix windows-installer installation


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

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


    一些相关链接

    【讨论】:

      【解决方案3】:

      如果问题实际上是由在非管理员模式下运行的小型可执行文件引起的,您可以通过在其应用程序清单 (app.manifest) 中将 requestedExecutionLevel 设置为 requireAdministrator 来解决此问题。

      Here 是一个循序渐进的示例。

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          【解决方案5】:

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

          转到安全

          并将安全设置设置为

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-21
            • 1970-01-01
            • 2019-05-26
            • 2021-04-02
            • 1970-01-01
            • 2017-01-24
            • 1970-01-01
            相关资源
            最近更新 更多