【发布时间】:2015-01-22 07:22:22
【问题描述】:
我需要删除一个 sqlite 数据库文件夹。在InstallFinalize 之后,我编写了一个自定义操作来删除此文件夹。如果我以管理员权限从命令提示符运行我的 MSI,它将删除该文件夹。否则不会删除 sqlite 数据库文件夹。
我已经在 Product.wxs 文件中添加了属性标签,
<Property Id="MSIUSEREALADMINDETECTION" Value="1" />
我还添加了InstallPrivileges="elevated"。没有什么对我有用。我登录的 windows 用户具有管理员权限。如果 msi 通过命令提示符以管理员身份运行,则删除文件夹有效。我需要以管理员身份打开安装程序。
【问题讨论】:
-
如果我没记错的话,即使使用管理员权限安装 MSI,默认情况下也不会使用它们运行您的自定义操作。我相信你需要在
CustomAction元素上设置Impersonate="yes"。 -
忽略我最后的评论,我似乎误读了你的问题:P
-
@Sinatr 右键单击 msi,以管理员身份运行删除 sqllite 文件夹。UAC 已启用。
-
MSIUSEREALADMINDETECTION 与此处无关。除非您以管理员身份运行,否则在 InstallFinalize 之后您不会被提升,这就是 Windows Installer 的工作方式。如果您使用 impersonation=yes 运行 CA,除非您运行提升的 MSI,否则它不会被提升。只有在 InstallFinalize 之前(以及在 InstallInitialize 之后)并且您被延迟并在没有模拟的情况下运行时,您才会被提升。不幸的是,您可能会发现使用系统帐户运行的提升的自定义操作无法访问数据库,在这种情况下,您会卡在当前正在做的事情上。
标签: c# visual-studio-2010 visual-studio wix