讓易語言編譯的32位程序在64位Windows7系統非管理員帳戶中執行

昨天有易語言開發者向我求助,說他用易語言編譯的32位程序軟件,發佈給64位操作系統Win 7用戶使用,因爲該用戶確定沒有管理員權限,而程序啓動時又要求必須輸入管理員密碼,如此陷入困境。 目標企業用戶管理嚴格,要求爲普通用戶分配管理員權限是不切實際的,只能開發人員從軟件開發的角度在技術上解決。

我聽到這個問題後,第一感覺是微軟用戶帳戶控制(UAC)引發的,估計通過給 exe 添加特定的 manifest 資源應該可以解決。於是我給了他一段代碼,讓他用 ResHacker 之類的軟件添加到軟件裏面去,試一試能不能解決問題:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="asInvoker" uiAccess="false" />
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>


結果測試之後他發現,非常成功的解決了問題。修改後的軟件發佈給用戶測試,啓動時也不再提示輸入管理員密碼了,功能一切正常。


下面對比一下易語言編譯時默認加入的 manifest 資源:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
	<assemblyIdentity
	    version="1.0.0.0"
	    processorArchitecture="X86"
	    name="......"
	    type="win32"
	/>
	<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
	    <security>
	        <requestedPrivileges>
	            <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
	        </requestedPrivileges>
	    </security>
	</trustInfo>
</assembly>

會發現兩者有細微的區別:asInvoker 和 requireAdministrator 的區別。後者會要求軟件啓動時必須有管理員權限,否則拒絕工作。那能不能一刀切的要求易語言默認採用 asInvoker 呢?恐怕還是不行的,因爲修改Windows註冊表之類的行爲還是必須得有管理員權限的(否則修改無效)。或許在某些條件下可以做一些智能判斷?


附 ResHacker (Resource Hacker) 3.6 下載地址

http://www.angusj.com/resourcehacker/

http://www.crsky.com/soft/1747.html

http://dl.pconline.com.cn/html_2/1/59/id=842&pn=0.html

發佈了275 篇原創文章 · 獲贊 442 · 訪問量 244萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章