Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在windows installer的自定义操作中获取当前用户名?_C#_.net_Windows Installer - Fatal编程技术网

C# 如何在windows installer的自定义操作中获取当前用户名?

C# 如何在windows installer的自定义操作中获取当前用户名?,c#,.net,windows-installer,C#,.net,Windows Installer,我需要为我的自定义安装操作获取运行安装程序的用户的用户名。由于安装程序获得特殊权限,Environment.UserName只给出“SYSTEM” Environment.SpecialFolders.ApplicationData返回当前用户的appdata文件夹,但我无法可靠地从中提取用户名 更多具体案例: 使用VisualStudio2008安装项目 自定义操作是安装后运行的安装程序类,并且是项目中唯一的一个。请使用System.Security.Principal命名空间中的Window

我需要为我的自定义安装操作获取运行安装程序的用户的用户名。由于安装程序获得特殊权限,Environment.UserName只给出“SYSTEM”

Environment.SpecialFolders.ApplicationData返回当前用户的appdata文件夹,但我无法可靠地从中提取用户名

更多具体案例:

使用VisualStudio2008安装项目
自定义操作是安装后运行的安装程序类,并且是项目中唯一的一个。请使用System.Security.Principal命名空间中的WindowsIdentity.GetCurrent().Name。这将包括域部分,因此如果您不需要,请在其末尾添加拆分。WindowsIdentity.GetCurrent().Name.Split(“”)[1]


首先,确保你已经把电视机关掉了

不幸的是,没有一种方法可以解决这个问题 直接为自定义设置此标志 安装项目的UI中的操作 在VisualStudioIDE中。在视觉上 Studio 2005,您可以使用后期生成 修改MSI以设置此值的步骤 bit以前使用过一种策略 本文对此进行了描述

第二,我假设你运行Vista,因为人们似乎对Vista有这个问题,有人问了这个问题,他的解决方案是跟随链接的博客文章


罗伯特·弗拉明(Robert Flaming)在上的博客文章也对这些问题有了一些见解。

我从来没有接触过VS安装项目(不过是与WiX一起玩的,可以推荐)。从您的问题来看,您的CA似乎延迟运行(并且具有提升的权限)

在网上搜索VS安装项目时,我遇到了一篇包含此段落的长篇文章(搜索“延迟”):

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


1:

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

Environment.GetEnvironmentVariable(“用户名”)

获取当前用户名。

基本上,您不能


解释其中一些更为详细,但实际上,一旦您提升了凭据,当前登录的用户就可以从安装程序的角度访问系统了(您可以让多人登录并在一台机器上运行应用程序,因此您必须从进程本身的上下文而不是坐在物理机器前面的人来思考).

是的,我已经关闭了模拟位。我查看了回答msdn问题的博客,并尝试了清单解决方案,但这似乎没有改变任何事情。我基本上只是从博客中复制了清单,并将其保存为setup.exe.manifests抱歉,我现在没有更多信息。您能提供更多信息吗ion?您是否正在使用安装项目?基于WiX的建筑?您是否可以添加位置(序列、位置)你安排了你的自定义操作?它是否运行延迟?立即?我在问题中添加了更多的细节。我没有触及WiX。非常确定它是立即的。还有其他答案也建议了这一点,但似乎已被删除。这在vista中不返回用户名,它仍然返回系统。请看这篇文章。这是more关于验证,但它可能很有用。这个答案对我很有用——它从自定义操作中返回登录用户,而不是提升的安装程序用户。我还使用以下方法获取域:Environment.GetEnvironmentVariable(“USERDOMAIN”)+“\\”+Environment.GetEnvironmentVariable(“用户名”)
using System.Security.Principal;

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