[VB6]如何讓 VB6 編譯出以管理權限執行的 exe 檔(sample:網路校時工具)
大約是在幾年前 Vista 剛出來時,發現之前寫的程式很多都會被 UAC 擋掉,(在那以前我都是把要用的資料放在 ProgramFiles 裡)。
當時的處理方式是直接更動 REG,在下面兩個地方加入執行檔的徑名並存值為‘RUNASADMIN’(REG_SZ),這可以強迫程式用高權限執行
治標不治本的方法(改 REG):
- HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
- HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
這種做法在在第二次以後執行時才會有效果,而且把 exe 檔 Copy 到別台電腦時管理權限並不會跟著走,所以最後來就甘脆請 User 關掉 UAC 避開這個麻煩 了。
沒幾年功夫 Windows7 出來了,因為手上還有很多程式都有這問題,當時也沒想改用 Visual Studio.net 重新開發所以一直停在想用 VB6 解決的迷思裡。
花了好幾天時間總算弄明白了它是放在資源 manifest 裡面,最後問題還是解決了(那陣子特別做了6個 VB6 可用的 .res 檔)現在就把過程分享一下。
最佳方法(夾帶 manifest 資源):
- 下載 RES_forVB6(UAC_Res.rar)
-
加入 VB6 專案
-
重新編譯成 exe 檔後就出現那個小盾牌了。
sample 下載:
- 附一個可向 NTP Server 校時的程式(VB6)寫的(adjclock_v1005_setup.rar)