標籤:blog http io ar sp strong on 檔案 問題
在微軟的作業系統中,vista和win7加入了UAC的功能,UAC(User Account Control,使用者帳戶控制)是微軟為提高系統安全而在Windows Vista中引入的新技術,它要求使用者在執行可能會影響電腦啟動並執行操作或執行更改影響其他使用者的設定的操作之前,提供許可權或管理員密碼。通過在這些操作啟動前對其進行驗證,UAC 可以協助防止惡意軟體和間諜軟體在未經許可的情況下在電腦上進行安裝或對電腦變更。
中所示,不屬於 Windows 的一部分的程式需要您的許可才能啟動。它具有指明其名稱和發行者的有效數位簽章,該數位簽章可以協助確保該程式正是其所聲明的程式。確保該程式正是您要啟動並執行程式。
但是這樣對於我們來說,會有這樣一種情況出現,我們開發的程式預設是沒有給它管理員權限的,如果我們把程式安裝了到系統硬碟下,那麼某些讀寫程式目錄下設定檔的操作就無法正確執行,因為被UAC阻攔,但是程式卻無法告訴我們什麼時候被阻攔,因為我們無法擷取到UAC的阻攔資訊。
很遺憾,我們最近開發的程式就出現了這種問題,測試了很多次,一個裝有win7系統的客戶向我們回饋了這個問題,我經過自己思考和搜尋MSDN,想了一下,大概有3種方法解決,給大家分享一下:
1:關閉使用者的UAC功能(顯然這個方法對於客戶來說有點不靠譜,但是這裡我也提一下,因為我就是特別煩UAC的提醒,所以給關閉了,程式一直也沒有報錯)。
關閉方法“控制台-使用者賬戶和家長監護服務-使用者賬戶-使用者賬戶控制設定”,設定為“從不通知”,儲存,重啟就OK了。
2:這個方法很簡單,就是在啟動並執行時候右鍵“以管理員身份運行”。也是可以解決此問題,但是對於那些只想直接單擊就啟動並執行使用者來說,估計他們也還是難以接受。
3:這個方法就比較長些了,解決出發點也是從我們自己的程式來解決。我來寫一下步驟:
<1>.在項目中“建立項”,選擇“應用程式資訊清單”,自己命名檔案名稱,如所示:
<2>.開啟建立的資訊清單檔,副檔名為.manifest,查看代碼,如:
我們可以看到有注釋說明UAC選項,我們需要更改的是這個節點的內容:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />將asInvoker,更改為requireAdministrator,以字面意思,我們大家就可以看出這個是請求以管理員權限啟動並執行意思。當然還有一個選項,highestAvailable,網上沒有直接翻譯,但從字面理解,就是擷取最高執行許可權的意思,這個可以根據自己的實際情況來設定。
<3>.開啟項目屬性,將“應用程式-資源”中的“清單”一項選擇為你建立的資訊清單檔,
然後產生一下應用就可以了。
文章到這基本就結束了,這裡也只是簡單的解決目前自己遇到的問題,網上查詢了一下,很多也都是英文的介紹,無奈哥們E文實在不是太好,勉強看懂了一些,實踐了一下,解決了手裡的問題,希望能幫到遇到同樣問題的朋友。 備忘:VS2008和VS2010下添加清單,都如本文一樣,VS2005會比較麻煩一些,我機器上只裝了08和10,沒有嘗試如何採用05解決,請裝了05的哥們嘗試一下自己解決吧,或者升級到08或者10吧。
參考文獻:
1:Using Manifests to Elevate an application in Vista
2:Create and Embed an Application Manifest (UAC)
[C#]解決程式Vista/Win7下因UAC導致的讀寫錯誤