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


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

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

更多案例细节:

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


7343
2017-12-21 14:57


起源

你能提供更多信息吗?你在使用安装项目吗?基于WiX的建筑?您可以添加自定义操作的位置(顺序,位置)吗?它是否延迟运行?即时? - Benjamin Podszun
我在这个问题上添加了更多细节。我没有碰过WiX。很确定它是即时的。 - Septih


答案:


基本上,你不能。

MSI中的UAC注释:凭据提示和权限 解释了一些更详细的信息,但是一旦您提升了当前登录用户的凭据,就会有效  从安装程序的角度来看系统(您可以让多个人登录并在计算机上运行应用程序,因此您必须从流程本身的上下文中思考,而不是坐在物理机器前面的人)。


3
2018-02-18 01:17





您可以从Environment变量中获取一些信息。我在用

Environment.GetEnvironmentVariable( “USERNAME”);

获取当前用户名。


7
2018-02-17 11:23



这个答案对我有用 - 它返回登录用户,而不是自定义操作中提升的安装程序用户。 - John Kroetch
我还使用此方法获取域:Environment.GetEnvironmentVariable(“USERDOMAIN”)+“\\”+ Environment.GetEnvironmentVariable(“USERNAME”) - John Kroetch


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

using System.Security.Principal;

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

2
2017-12-21 15:08



还有其他答案也表明了这一点,但似乎已被删除。这不会在vista中返回用户名,它仍会返回SYSTEM - Septih
看看这篇文章。 stackoverflow.com/questions/400872/...。它更多的是验证,但它可能是有用的。 - Scott Boettger


首先,确保你有 冒充位 设置为OFF。 这是怎么回事

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

其次,我假设您正在运行Vista,因为人们似乎对Vista有这个问题而且有人问过这个问题 MSDN 他的解决方案是关注链接的博客文章 这里

Robert Flaming的博客文章 MSI中的UAC注释:NoImpersonate Bit Mistake 还可以深入了解这些问题。


2
2017-12-21 15:18



是的,我已经关闭了Impersonate位。我查看了回答msdn问题的博客并尝试了清单解决方案,但这似乎没有改变任何东西。我基本上只是从博客中复制了清单并将其保存为setup.exe.manifest - Septih
对不起,但我没有任何信息atm


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


2
2017-12-22 13:24