如何在Windows安装程序的自定义操作中获取当前用户名?

时间:2009-12-21 14:57:24

标签: c# .net windows-installer

我需要获取运行安装程序的用户的用户名以进行自定义安装操作。因为安装程序获得特殊权限,所以Environment.UserName只提供“SYSTEM”。

Environment.SpecialFolders.ApplicationData返回当前用户appdata文件夹,但我无法可靠地挖掘用户名。

更多案例细节:

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

5 个答案:

答案 0 :(得分:8)

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

<强> Environment.GetEnvironmentVariable( “USERNAME”);

获取当前用户名。

答案 1 :(得分:3)

基本上,你不能。

UAC in MSI Notes: Credential Prompt and Permissions解释了其中的一些细节,但是从安装程序的角度来看,当你提升了你的凭据时,当前登录的用户 SYSTEM是有效的(你可以有多个)人们在计算机上登录并运行应用程序,因此您必须从流程本身的上下文中思考,而不是坐在物理机器前面的人员。

答案 2 :(得分:2)

使用WindowsIdentity.GetCurrent()。System.Security.Principal命名空间中的名称。这将包括域部分,因此如果您不需要在其末尾添加拆分。 WindowsIdentity.GetCurrent()。Name.Split( '')[1]。

using System.Security.Principal;

this.nametext = WindowsIdentity.GetCurrent().Name.Split('')[1];

答案 3 :(得分:2)

首先,确保将Impersonate bit设置为OFF。 Here is how

  

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

其次,我认为你正在运行Vista,因为人们似乎对Vista有这个问题,有人在MSDN上提出这个问题而他的解决方案是关注链接here的博客文章。

罗伯特·弗拉明在UAC in MSI Notes: The NoImpersonate Bit Mistake上发表的博客文章也对这些问题提供了一些见解。

答案 4 :(得分:2)

我从未接触过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/