我需要获取运行安装程序的用户的用户名以进行自定义安装操作。因为安装程序获得特殊权限,所以Environment.UserName只提供“SYSTEM”。
Environment.SpecialFolders.ApplicationData返回当前用户appdata文件夹,但我无法可靠地挖掘用户名。
更多案例细节:
使用Visual Studio 2008安装项目 自定义操作是安装后运行的安装程序类,是项目中唯一的一个。
我需要获取运行安装程序的用户的用户名以进行自定义安装操作。因为安装程序获得特殊权限,所以Environment.UserName只提供“SYSTEM”。
Environment.SpecialFolders.ApplicationData返回当前用户appdata文件夹,但我无法可靠地挖掘用户名。
更多案例细节:
使用Visual Studio 2008安装项目 自定义操作是安装后运行的安装程序类,是项目中唯一的一个。
基本上,你不能。
MSI中的UAC注释:凭据提示和权限 解释了一些更详细的信息,但是一旦您提升了当前登录用户的凭据,就会有效 是 从安装程序的角度来看系统(您可以让多个人登录并在计算机上运行应用程序,因此您必须从流程本身的上下文中思考,而不是坐在物理机器前面的人)。
您可以从Environment变量中获取一些信息。我在用
Environment.GetEnvironmentVariable( “USERNAME”);
获取当前用户名。
使用WindowsIdentity.GetCurrent()。System.Security.Principal命名空间中的名称。这将包括域部分,因此如果您不需要在其末尾添加拆分。 WindowsIdentity.GetCurrent()。Name.Split( '')[1]。
using System.Security.Principal;
this.nametext = WindowsIdentity.GetCurrent().Name.Split('')[1];
不幸的是,没有办法 直接为自定义设置此标志 用户界面中的安装项目操作 在Visual Studio IDE中。在视觉中 Studio 2005,您可以使用后期构建 修改MSI以设置此步骤的步骤 先前使用策略 在此描述 博客文章。
其次,我假设您正在运行Vista,因为人们似乎对Vista有这个问题而且有人问过这个问题 MSDN 他的解决方案是关注链接的博客文章 这里。
Robert Flaming的博客文章 MSI中的UAC注释:NoImpersonate Bit Mistake 还可以深入了解这些问题。
我从未接触过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/