C# MSI安装程序自定义操作标识问题

C# MSI安装程序自定义操作标识问题,c#,windows-installer,identity,C#,Windows Installer,Identity,我正在创建一个在数据库上执行脚本的自定义操作。问题是,Connections使用集成安全性,因此当我尝试打开连接时,会出现错误:用户“Domain\ComputerName$”登录失败 当我检查自定义操作上的标识时(使用System.Security.Principal.WindowsIdentity.GetCurrent()),我总是得到“NT AUTHORITY\System” 但是我正在我的帐户下运行安装程序,这个帐户对数据库有足够的权限 如何在运行msi文件的真实用户下运行自定义操作或以

我正在创建一个在数据库上执行脚本的自定义操作。问题是,Connections使用集成安全性,因此当我尝试打开连接时,会出现错误:用户“Domain\ComputerName$”登录失败

当我检查自定义操作上的标识时(使用
System.Security.Principal.WindowsIdentity.GetCurrent()
),我总是得到“NT AUTHORITY\System” 但是我正在我的帐户下运行安装程序,这个帐户对数据库有足够的权限


如何在运行msi文件的真实用户下运行自定义操作或以任何其他方式解决此问题

简而言之,你需要

  • 为自定义操作启用“模拟”
  • (在Windows Vista和Windows 7系统上)在“提升”上下文(即“以管理员身份运行”)中运行整个安装

  • 如何完成#1取决于您使用什么创建安装包。为了方便地处理#2,我使用了一个配置为运行“提升”的引导程序(使用创建)。

    好吧,有一个简单的解决方案,但可能并不适用于所有情况

    如果设置了InstallAllUsers的项目属性 为true,安装程序使用“NT AUTHORITY\SYSTEM”帐户运行,但如果将其设置为false,则安装程序将使用启动安装程序的用户的身份运行


    将其设置为false对我来说是有效的,即使我正在安装一个为所有用户运行的Windows服务。

    如果我正在进行VS 2008安装项目,我将如何实现#1?嗯,我不确定这一点,但一点研究让我相信,也许你不能;至少,要做一些激烈的事情,比如用Orca手动编辑.msi。