回答:
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
Environment.UserName
ます。「RunAs」ユーザーを返します。
MessageBox.Show(Environment.UserName);
あなたにこれを入れてwindow_loaded
....イベント、およびRunAsのを使用してそれを実行
Domain\Username
。ユーザー名に関連付けられた名前を取得するにはどうすればよいですか?
ユーザーのネットワークにいる場合、ユーザー名は異なります。
Environment.UserName
- Will Display format : 'Username'
のではなく
System.Security.Principal.WindowsIdentity.GetCurrent().Name
- Will Display format : 'NetworkName\Username'
希望する形式を選択します。
Environment.UserDomainName + "\\" + Environment.UserName
と同じように見える結果を得るのに使用できますSystem.Security.Principal.WindowsIdentity.GetCurrent().Name
。さて、違いは何ですか、あなたは尋ねます...私はわかりません。
System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split( '\\' ).Last();
ToArray()
後にSplit
呼び出す前にLast()
ToArray()
必要ありません。あなたが必要になるでしょうusing System.Linq;
。
プロパティを試してください:Environment.UserName
。
string userName = Environment.UserName;
Environment.UsernName
ログインしたアカウントWindowsIdentity.GetCurrent().Name
名が表示されますが、アプリケーションが実行されているアカウント名が返されます。
Environment.UserNameのドキュメントは少し矛盾しているようです:
同じページでそれは言う:
Windowsオペレーティングシステムに現在ログオンしているユーザーのユーザー名を取得します。
そして
現在のスレッドを開始した人のユーザー名を表示します
RunAsを使用してEnvironment.UserNameをテストすると、最初にWindowsにログオンしたユーザーではなく、RunAsユーザーアカウント名が表示されます。
私は他の答えを完全に二番目に言います、しかし私は言うもう一つの方法を強調したいです
String UserName = Request.LogonUserIdentity.Name;
上記のメソッドは、DomainName \ UserNameの形式でユーザー名を返しました。たとえば、EUROPE \ UserName
これは以下とは異なります:
String UserName = Environment.UserName;
次の形式で表示されます:UserName
そして最後に:
String UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
これは与えた:NT AUTHORITY\IUSR
(IISサーバー上でアプリケーションを実行している間)及びDomainName\UserName
(ローカルサーバ上でアプリケーションを実行中)。
Request
は、Webアプリケーションの場合にのみ機能します。それはのインスタンスですSystem.Web.HttpRequest
既存の回答からいくつかの組み合わせを試しましたが、それらは私に与えていました
DefaultAppPool
IIS APPPOOL
IIS APPPOOL\DefaultAppPool
私は結局使用しました
string vUserName = User.Identity.Name;
実際のユーザーのドメインユーザー名のみがわかりました。
String myUserName = Environment.UserName
これはあなたに出力を与えます-your_user_name
以前のすべての回答を試しましたが、どれもうまくいかなかったため、MSDNで回答を見つけました。私にとって正しいものについては、「UserName4」を参照してください。
私は後だ、ログインユーザによって表示されているように、:
<asp:LoginName ID="LoginName1" runat="server" />
これらをすべて試すために私が書いた小さな関数は次のとおりです。私の結果は、各行の後のコメントにあります。
protected string GetLoggedInUsername()
{
string UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; // Gives NT AUTHORITY\SYSTEM
String UserName2 = Request.LogonUserIdentity.Name; // Gives NT AUTHORITY\SYSTEM
String UserName3 = Environment.UserName; // Gives SYSTEM
string UserName4 = HttpContext.Current.User.Identity.Name; // Gives actual user logged on (as seen in <ASP:Login />)
string UserName5 = System.Windows.Forms.SystemInformation.UserName; // Gives SYSTEM
return UserName4;
}
この関数を呼び出すと、ログインしているユーザー名が返されます。
更新:ローカルサーバーインスタンスでこのコードを実行すると、Username4は ""(空の文字列)を返しますが、UserName3とUserName5はログインしたユーザーを返すことを示します。注意すべきことだけです。
コードは次のとおりです(ただしC#ではありません)。
Private m_CurUser As String
Public ReadOnly Property CurrentUser As String
Get
If String.IsNullOrEmpty(m_CurUser) Then
Dim who As System.Security.Principal.IIdentity = System.Security.Principal.WindowsIdentity.GetCurrent()
If who Is Nothing Then
m_CurUser = Environment.UserDomainName & "\" & Environment.UserName
Else
m_CurUser = who.Name
End If
End If
Return m_CurUser
End Get
End Property
これがコードです(現在はC#でも):
private string m_CurUser;
public string CurrentUser
{
get
{
if(string.IsNullOrEmpty(m_CurUser))
{
var who = System.Security.Principal.WindowsIdentity.GetCurrent();
if (who == null)
m_CurUser = System.Environment.UserDomainName + @"\" + System.Environment.UserName;
else
m_CurUser = who.Name;
}
return m_CurUser;
}
}
これを試して
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT UserName FROM Win32_ComputerSystem");
ManagementObjectCollection collection = searcher.Get();
string username = (string)collection.Cast<ManagementBaseObject>().First()["UserName"];
今では良く見えます
複数のユーザーに配布される予定のWindowsフォームアプリの場合、その多くはVPN経由でログインし、いくつかの方法を試してみましたが、すべてが私のローカルマシンのテストでは機能しましたが、他では機能しませんでした。私は適応して機能するマイクロソフトの記事に出くわしました。
using System;
using System.Security.Principal;
namespace ManageExclusion
{
public static class UserIdentity
{
// concept borrowed from
// https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity(v=vs.110).aspx
public static string GetUser()
{
IntPtr accountToken = WindowsIdentity.GetCurrent().Token;
WindowsIdentity windowsIdentity = new WindowsIdentity(accountToken);
return windowsIdentity.Name;
}
}
}
現在のWindowsユーザー名を取得します。
using System;
class Sample
{
public static void Main()
{
Console.WriteLine();
// <-- Keep this information secure! -->
Console.WriteLine("UserName: {0}", Environment.UserName);
}
}
他の人に役立つ場合は、c#.net 3.5アプリからVisual Studio 2017にアプリをアップグレードしたときに、このコード行がUser.Identity.Name.Substring(4);
このエラーをスローしました " startIndexは文字列の長さより大きくすることはできません」
に変更したときはうれしかったですが、ドメイン部分なしでログインしたWindowsユーザーを取得するためにSystem.Security.Principal.WindowsIdentity.GetCurrent().Name
使用Environment.UserName;
してしまいました。
私はここでほとんどの回答を調べましたが、どれも正しいユーザー名を教えてくれませんでした。
私の場合、Shift +ファイルを右クリックして「別のユーザーとして実行」する場合など、別のユーザーからアプリを実行しているときに、ログインしたユーザー名を取得したいと考えました。
私が試した答えは私に「他の」ユーザー名を与えました。
このブログ投稿は、ログインしたユーザー名を取得する方法を提供します。これは、私のシナリオでも機能します。https:
//smbadiwe.github.io/post/track-activities-windows-service/
Wtsapiを使用します
Environment.UserName
か?