2

我有一個安裝項目(在Windows 7上運行)在啓動剛剛安裝的應用程序的提交時啓動自定義操作。在這個應用程序的啓動過程中,我有一個方法檢查當前用戶的名字以執行一些認證。當從該自定義操作啓動我得到的不是「DOMAIN \ USER」「NTAUTHORITY \ SYSTEM」當從自定義操作中運行時,WindowsIdentity.GetCurrent()返回SYSTEM

更新: 這從接受的答案環節就是解決我的問題:

How can I customize an MSI in the Visual Studio setup/deployment project?

回答

3

你或許應該閱讀USERNAME MSI屬性的值:

string username = Session.Property("USERNAME"); 

以上將立即執行模式下工作;但是,在延遲模式下,您將明確地必須使用CustomActionData屬性將用戶名傳遞給您的自定義操作。詳細信息請參考這裏:

Tip: MSI Properties and Deferred Execution

UPDATE:如果你想在安裝完成後,你可能更喜歡在這篇文章中所描述的方法後啓動安裝的應用程序:

Launching Your Application After Install using Visual Studio 2005

或使用亞倫Stebner的劇本修改MSI:

How can I customize an MSI in the Visual Studio setup/deployment project?

+0

到哪裏「的WindowsIdentity」呼叫位於正在安裝的應用程序的代碼,它沒有微星 – jwarzech 2010-05-03 16:30:56

+0

@jwarzech知識:那麼你的問題似乎是另一回事? 「如何在安裝後啓動已安裝的應用程序?」您使用哪種工具來生成您的設置? – 2010-05-03 16:33:20

+0

我有一個VS2008部署項目,安裝一個應用程序,然後調用運行'Process.Start(myapplication)'的CustomAction。應用程序所做的第一件事是檢查WindowsIdentity並在授權數據庫表中查找用戶。 – jwarzech 2010-05-03 16:37:20

0

下面的代碼是我在我的安裝程序類的自定義操作使用。這將返回登錄用戶當前的,而不是「NTAUTHORITY \ SYSTEM」

IdentityReference identity = new System.Security.Principal.NTAccount(Environment.GetEnvironmentVariable("USERDOMAIN") + "\\" + Environment.GetEnvironmentVariable("USERNAME")) 
相關問題