我需要获取运行安装程序的用户的用户名以进行自定义安装操作。因为安装程序获得特殊权限,所以Environment.UserName只提供“SYSTEM”。
Environment.SpecialFolders.ApplicationData返回当前用户appdata文件夹,但我无法可靠地挖掘用户名。
更多案例细节:
使用Visual Studio 2008安装项目 自定义操作是安装后运行的安装程序类,是项目中唯一的安装程序类。
答案 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/