在UAC打开的情况下编辑Program Files中的配置

时间:2011-04-15 00:20:03

标签: wix uac

我的问题非常相似 Launch application after installation complete, with UAC turned on

我们希望在安装程序完成后启动配置过程,而不是在安装程序中构建一组复杂的配置屏幕。

在所有情况下,这都需要编辑ProgramFiles文件夹中的内容,如果在没有提升的情况下启用UAC,则该内容不能作为标准用户进行编辑。

我们知道并且不想使用的选项:

  • 使用引导程序提升整个安装程序 - 我们不希望这样做以支持在提升时执行配置的1个操作。
  • 包括配置过程中的强制提升 - 虽然我们可以在某些情况下将其用于应用程序,但在某些情况下,我们希望在App.config上启动一个简单的编辑器,此强制提升不是一个选项。

是否有某种方法可以获得

的升级版本
<Property Id="WixShellExecTarget" Value="[INSTALLDIR]\app.config" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" />

或者更适合制作自定义用户界面并在UI中添加复选框并将其作为延迟操作启动而无需等待,例如

<CustomAction Id="Config.SetProperty" Property="Config" Value='"Open" app.config' />
<CustomAction Impersonate="no" Execute="deferred" Return="ignore" 
    Id="Config" BinaryKey="WixCA" DllEntry="CAQuietExec" />

或者我们只是忘了这一切都是一个坏主意,管理员可以找到该文件并右键单击提升进行编辑。

2 个答案:

答案 0 :(得分:1)

其中一个选项可能是像现在一样从安装程序启动您的应用程序。然后,当您的应用检测到需要编辑配置文件时,它会请求提升。

另一种选择是将配置文件存储在ProgramData目录中而不是存储在Program Files中。这个位置是可写的,没有高程。这里有一点需要注意:在那里创建的文件和目录只对创建它们的用户具有写入/修改权限;其他用户将具有只读访问权限。如果不合适,您可以更改应用配置文件的ACL。

答案 1 :(得分:0)

我建议使用单独的配置工具,要求提升所有用户配置,如果提升被拒绝,则继续使用每用户配置。

在安装程序完成时启动此操作(仅从UI序列,将其绑定到“完成”按钮),以便正常安装启动并在完成时提示提升,而静默安装需要管理员手动启动配置工具或编辑配置文件本身。

请注意,如果您将配置文件作为MSI组件进行安装,则如果已对其进行了编辑,则广告快捷方式或运行Windows Installer“修复”将使用MSI中包含的快捷方式覆盖此文件。我们的一般解决方案是部署sample.config并要求管理员编辑将其复制到application.config post-install。如果application.config不存在,则启动配置工具或显示错误消息。这具有额外的好处,即在删除/升级时保留配置。