2012-02-29 36 views
2

我有一個ClickOnce應用程序需要執行regasm,以註冊剛剛更新的程序集。無法從ClickOnce應用程序調用ShellExecute「runas」

如果UAC關閉,它工作正常。但是,如果UAC處於打開狀態,則regsam的退出代碼爲100。如果我在cmd提示符下運行相同的命令,則會失敗並顯示有關需要管理員權限的消息。如果我在打開cmd提示符時使用run作爲管理員選項,它會成功。

我試着將清單中的asInvoker更改爲highestAvailable,它在本地工作,但ClickOnce拒絕以這種方式發佈它。我試圖爲RegistryPermission添加一個迫切的權限需求,但沒有用。我試過設置

ProcessStartInfo.verb = "runas" 

and .UseShellExecute = True 

但仍然沒有愛!

我已經做了大量的關於CAS,UAC和ClickOnce的閱讀......我看到了一些關於UAC與ClickOnce夢不一致的地方(這讓我覺得BS是完全不同的),所以我想我的問題是,我正試圖做甚麼?如果是這樣,怎麼樣?


其餘只是背景信息,這並不嚴格相關:令人髮指的是,項目已完成,除了這個問題!

該項目的目的是爲Outlook自動更新「共享」AddIn(IExtensibility2)。由於我們選擇退出VSTO,因此我們無法使用本機ClickOnce支持,因此我創建了一個ClickOnce應用程序,在該應用程序中我們將更新後的DLL作爲資源嵌入。它在啓動時執行,所以當新版本的ClickOnce應用程序可用時,它會自動下載;當它執行時,它會將安裝的版本與嵌入的副本版本進行比較,並提示用戶嵌入版本是否更新。我們希望能夠利用ClickOnce而不是推出我們自己的產品(這是我們爲legace VB6版本所做的)。

回答

1

如果您需要超過沙盒權限,則最好選擇完全信任的應用程序。在.Net 4.0中,所有CAS都被棄用。在.NET 4.0中完全信任點擊一次應用程序可以做任何事情。

+0

我有「這是一個完全信任的應用程序」單選按鈕集,在安全選項卡中。只要UAC被禁用,它可以執行任何操作,但如果不是,它會失敗/不會提示升級。 – 2012-03-02 10:48:28

+1

其實,這是我的不好,UseShellExecute沒有被設置爲True,這是問題;與那個和動詞設置爲「runas」,UAC被調用。 – 2012-03-22 19:30:31

相關問題