代码之家  ›  专栏  ›  技术社区  ›  Septih

如何在Windows Installer的自定义操作中获取当前用户名?

  •  11
  • Septih  · 技术社区  · 15 年前

    我需要为我的自定义安装操作获取运行安装程序的用户的用户名。因为安装程序有特殊的特权,所以environment.username只提供“system”。

    environment.specialfolders.applicationdata返回当前用户的appdata文件夹,但我无法从中可靠地挖掘用户名。

    更多案例细节:

    使用Visual Studio 2008安装项目 自定义操作是安装后运行的安装程序类,并且是项目中唯一的一个。

    5 回复  |  直到 13 年前
        1
  •  3
  •   saschabeaumont    13 年前

    基本上,你不能。

    UAC in MSI Notes: Credential Prompt and Permissions 解释了其中一些更详细的内容,但实际上,一旦提升了凭据,当前登录的用户 从安装人员的角度来看,系统(您可以让多个人登录并在一台计算机上运行应用程序,因此您必须从进程本身的上下文考虑,而不是从坐在物理计算机前面的人考虑)。

        2
  •  8
  •   Ankit Verma    13 年前

    您可以从环境变量中获得一些信息。我正在使用

    environment.getenvironmentvariable(“用户名”);

    获取当前用户名。

        3
  •  2
  •   Scott Boettger    15 年前

    使用System.Security.Principal命名空间中的windowsIdentity.getcurrent().name。这也将包括域部分,因此如果不需要在其末尾添加拆分。windowsIdentity.getcurrent().name.split('')[1]。

    using System.Security.Principal;
    
    this.nametext = WindowsIdentity.GetCurrent().Name.Split('')[1];
    
        4
  •  2
  •   user195488    15 年前

    首先,确保你有 Impersonate bit 设置为关闭。 Here is how .

    不幸的是,没有办法 直接为自定义设置此标志 设置项目的用户界面中的操作 在Visual Studio IDE中。在视觉上 Studio 2005,您可以使用后期生成 修改MSI以设置此项的步骤 以前使用过策略 在此描述 blog post .

    第二,我假设你在运行Vista,因为人们似乎对Vista有这个问题,有人在上问了这个问题。 MSDN 他的解决方案是跟踪博客链接 here .

    罗伯特·弗拉明的博客帖子 UAC in MSI Notes: The NoImpersonate Bit Mistake 同时也对这些问题有了一些了解。

        5
  •  2
  •   Benjamin Podszun    15 年前

    我从来没有接触过vs安装项目(不过可以和wix一起玩,并且可以推荐它)。考虑到您的问题,您的CA似乎运行延迟(并且具有提升的特权)。

    在网上搜索vs安装项目时,我看到一篇很长的文章 1 包含此段落的内容(搜索“延期”):

    换句话说,Visual Studio设计将您限制为当文件位于系统上时调用的自定义操作(延迟的自定义操作),这意味着您必须使用CustomActionData属性。其他生成msi文件的工具通常更灵活,因此如果您预期会有复杂的设置,请调查这些工具。

    1: http://www.simple-talk.com/dotnet/visual-studio/visual-studio-setup---projects-and-custom-actions/