我的问题非常相似 Launch application after installation complete, with UAC turned on
我们希望在安装程序完成后启动配置过程,而不是在安装程序中构建一组复杂的配置屏幕。
在所有情况下,这都需要编辑ProgramFiles文件夹中的内容,如果在没有提升的情况下启用UAC,则该内容不能作为标准用户进行编辑。
我们知道并且不想使用的选项:
是否有某种方法可以获得
的升级版本<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" />
或者我们只是忘了这一切都是一个坏主意,管理员可以找到该文件并右键单击提升进行编辑。
答案 0 :(得分:1)
其中一个选项可能是像现在一样从安装程序启动您的应用程序。然后,当您的应用检测到需要编辑配置文件时,它会请求提升。
另一种选择是将配置文件存储在ProgramData目录中而不是存储在Program Files中。这个位置是可写的,没有高程。这里有一点需要注意:在那里创建的文件和目录只对创建它们的用户具有写入/修改权限;其他用户将具有只读访问权限。如果不合适,您可以更改应用配置文件的ACL。
答案 1 :(得分:0)
我建议使用单独的配置工具,要求提升所有用户配置,如果提升被拒绝,则继续使用每用户配置。
在安装程序完成时启动此操作(仅从UI序列,将其绑定到“完成”按钮),以便正常安装启动并在完成时提示提升,而静默安装需要管理员手动启动配置工具或编辑配置文件本身。
请注意,如果您将配置文件作为MSI组件进行安装,则如果已对其进行了编辑,则广告快捷方式或运行Windows Installer“修复”将使用MSI中包含的快捷方式覆盖此文件。我们的一般解决方案是部署sample.config并要求管理员编辑将其复制到application.config post-install。如果application.config不存在,则启动配置工具或显示错误消息。这具有额外的好处,即在删除/升级时保留配置。