2011-02-14 260 views
1

我們正在創建一個C#.net應用程序,該應用程序使用在 C++中開發的.dll文件。它還需要一些由第三方開發的用戶控件 (與應用程序捆綁爲.dll)。如果我們在 上運行此應用程序,則啓用UAC的計算機將按預期執行。但是,如果我們 使用通過Visual Studio部署 項目創建的安裝程序進行部署,它會崩潰。如果安裝的可執行文件是「作爲 管理員」運行。 另外,如果需要管理員權限的清單被添加到 C#可執行文件,它會在安裝後正常運行,但是UAC每次運行可執行文件時都會詢問 。 是否有東西可以指定始終作爲管理員運行 而不必每次都彈出UAC或安裝程序更改了這樣的 它不需要管理員權限在安裝後運行 (因爲如果在沒有安裝的情況下運行應用程序不需要管理員 privilleges)?使用UAC部署C#應用程序

+0

如果您以管理員身份運行並啓用UAC,則無法阻止UAC彈出,因爲這會挫敗UAC的用途。 – AndrewC 2011-02-14 15:56:34

+0

我同意不應該這樣,但是我的意思是,如果獲得一次許可,那麼是否有辦法讓它記住它是可信的可執行文件? – quake 2011-02-14 16:06:39

回答

3

顯然,如果沒有UAC提示,您將無法以管理員身份運行。這會讓惡意軟件編寫者的生活變得簡單。

我懷疑它的安裝位置。通常在\ Program Files \下,這也是它的默認工作目錄。但是,該程序在非管理員帳戶下運行時可能不會寫入該程序。 DLL可能試圖寫入當前工作目錄嗎?

+0

是的,.dll寫入日誌文件。 – quake 2011-02-14 16:07:32

0

實際上有一個解決方案。將需要提升的代碼遞送到Windows服務。你的應用程序然後可以調用你的服務來運行提升的命令(使用WCF,RPC,遠程處理或任何你想要的)。

但是你必須要小心:

  • 它可以是一個安全漏洞,因爲非高架程序可能要求升高一個做的工作。如果您的應用程序包含錯誤或沒有足夠的數據檢查,可能會很危險。
  • 您的服務將始終運行
  • 您的服務將以特定的用戶身份或內建運行。該進程將無法獲得登錄用戶的身份。如果沒有UAC,我認爲代表團不會工作。
0

如已回答的,如果應用程序清單中請求管理員權限,則應用程序啓動期間無法解決UAC提示。

但是,您可能會使用一種解決方法:在安裝期間,爲日誌文件或文件夾上的每個人設置寫入權限。

請注意,這不是一個「乾淨」的解決方案。相反,你應該改變DLL的代碼來登錄別的地方。