2016-06-27 75 views
0

我想以不同的用戶身份運行我的項目,但我所看到的所有解決方案都是以不同的用戶身份啓動一個過程。我想將用戶名硬編碼到項目中,以便每次程序運行時都以該用戶身份運行。我需要這樣做的原因是,在我的網絡上沒有權限的用戶可以啓動和停止服務器上的服務。以不同的用戶身份運行應用程序

因此,我需要像安全地存儲在程序中的用戶名和密碼,以便每次運行時它都以該用戶身份運行。

正如我之前所說的,我以前發現的所有模擬用戶只是爲了啓動一些外部進程,但我需要它以該用戶開始。

編輯

我已經找到了解決我的問題,它的PSEXEC。

+4

也許您在尋找[impersonation](http://www.codeproject.com/Articles/10090/A-small-C-Class-for-impersonating-a-User)? (免責聲明:我寫了鏈接的文章) –

+1

感謝您的快速回復:)我將馬上看看它,並告訴您這是否適合我。 – YMIFrozen

+0

我查看了代碼和解釋,但從收集的內容來看,這只是一個臨時解決方案,因爲它只會執行括號內的代碼。我需要整個項目作爲一個不同的用戶來運行。 使用(新的模仿( 「名爲myUsername」, 「myDomainname」, 「MYPASSWORD」)){ ... <代碼,新的環境下執行> ... } – YMIFrozen

回答

0

還有一些其他的選擇可以幫助實現這個像PsExex工具。 https://technet.microsoft.com/en-us/sysinternals/psexec.aspx

您可以從Process類提供所需的參數(如用戶名,密碼,啓動過程),並使用這些用戶憑證成功啓動它。

欲瞭解更多信息: - https://social.technet.microsoft.com/Forums/scriptcenter/en-US/e20ddf85-26ba-45a7-a987-89de076eda23/solved-run-program-as-different-user-through-batch-file?forum=ITCG

例如psexec \ workstation64 -c test.bat -u USERNAME -p密碼

它適用於我的情況沒有任何問題。

+0

非常感謝您的回答! PsExec正是我需要的:) – YMIFrozen

-2

您需要更改應用程序池標識。進入高級,查找身份,選擇自定義帳戶並輸入憑據。

enter image description here

編輯:我猜你是在一個IIS塞納里奧在第一。由於您將需求更改爲WPF,因此此答案無效。請忽略。

感謝

+1

這不回答這個問題。問題是關於WPF應用程序。 .NET應用程序比IIS中的ASP.NET頁面多一點,你知道嗎?桌面應用程序沒有可配置的應用程序池。 –

+0

像這樣的東西正是我要找的東西,但我很害怕@ThorstenDittmar是正確的...我需要這樣做,但在代碼中..我目前正試圖實施一個解決方案,但我建議,在理解假冒作品的工作方面有些困難。 – YMIFrozen

+0

我很確定當我發佈答案時,沒有「P.S. WPF應用程序」... – GELR

0

你可以與不同的用戶憑據的新工藝(見:ProcessStart)。因此,一種可能的解決方案是檢查命令行參數是否傳遞給應用程序(例如'/ runAsOther')。如果不是,請在所需用戶的新進程中再次啓動應用程序,並傳遞命令行參數'/ runAsOther'。

代碼示例:

if (!Environment.GetCommandLineArgs().Contains("/runAsOther")) 
{ 
    var process = new Process(); 
    var securePassword = new SecureString(); 
    process.StartInfo.UseShellExecute = false; 
    process.StartInfo.FileName = "path to you application"; 
    process.StartInfo.Arguments = "/runAsOther"; 
    process.StartInfo.Domain = "domainname"; 
    process.StartInfo.UserName = "username"; 
    var password = "test"; 
    for (int x = 0; x < password.Length; x++) 
     securePassword.AppendChar(password[x]); 
    process.StartInfo.Password = securePassword; 
    process.Start(); 
    Environment.Exit(1); 
} 

所以我需要的東西就像安全地存儲在程序,以便在每次運行時它會作爲該用戶的用戶名和密碼。

在應用程序中安全地存儲密碼是不可能的,不推薦使用。但是,您可以做的最好的事情是使用計算機專用算法對其進行解密(例如,使用DataProtector類)。

+0

謝謝你的迴應,但正如我在問題中所說,我知道這一點,但它只從外部運行應用程序,我想知道是否有一種方法可以在項目中寫入並在激活exe文件應用程序會自動使用其他用戶的登錄憑據。 – YMIFrozen

相關問題