【问题标题】:WindowsIdentity.GetCurrent() returns SYSTEM when ran from custom actionWindowsIdentity.GetCurrent() 从自定义操作运行时返回 SYSTEM
【发布时间】:2011-02-15 02:34:26
【问题描述】:

我有一个安装项目(在 Windows 7 上运行),它在提交时启动一个自定义操作,该操作启动刚刚安装的应用程序。在此应用程序启动期间,我有一个方法可以检查当前用户的名称以执行某些身份验证。从这个自定义操作启动时,我得到 'NTAUTHORITY\SYSTEM' 而不是 'DOMAIN\USER'

更新: 已接受答案中的此链接解决了我的问题:

How can I customize an MSI in the Visual Studio setup/deployment project?

【问题讨论】:

    标签: .net visual-studio-2008 windows-installer windows-authentication


    【解决方案1】:

    您可能应该阅读USERNAME MSI 属性的值:

    string username = Session.Property("USERNAME");
    

    以上将在立即执行模式下工作;但是,在延迟模式下,您必须使用 CustomActionData 属性将用户名显式传递给您的自定义操作。详情请看这里:

    Tip: MSI Properties and Deferred Execution

    更新:如果您想在设置完成后启动已安装的应用程序,您可能更喜欢本文中描述的方法:

    Launching Your Application After Install using Visual Studio 2005

    或使用 Aaron Stebner 的脚本来修改您的 MSI:

    How can I customize an MSI in the Visual Studio setup/deployment project?

    【讨论】:

    • 调用“WindowsIdentity”的代码位于正在安装的应用程序中,它不知道msi
    • @jwarzech:那么你的问题似乎是另一个问题? “安装后如何启动已安装的应用程序?”您使用哪种工具来生成设置?
    • 我有一个 VS2008 部署项目,它安装一个应用程序,然后调用一个运行“Process.Start(myapplication)”的 CustomAction。应用程序做的第一件事是检查 WindowsIdentity 并在授权数据库表中查找用户。
    【解决方案2】:

    以下代码是我在安装程序类中用作自定义操作的代码。这将返回当前登录的用户,而不是 'NTAUTHORITY\SYSTEM'

        IdentityReference identity = new System.Security.Principal.NTAccount(Environment.GetEnvironmentVariable("USERDOMAIN") + "\\" + Environment.GetEnvironmentVariable("USERNAME"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多