免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

關(guān)于HM NISEDIT在新版系統(tǒng)下編譯并運(yùn)行提示權(quán)限不足問題的解決方案

如果你使用過NSIS為你的項(xiàng)目制作過安裝包,那HM nisedit一定是你繞不過去的檻,作為NSIS號(hào)稱的最佳免費(fèi)IDE/編輯器,功能齊全,與NSIS配合性能強(qiáng)悍,實(shí)至名歸 。只是開發(fā)作者最后版本更新在2005年已經(jīng)停止,國(guó)內(nèi)漢化版修修補(bǔ)補(bǔ)也僅僅堅(jiān)持到2006年未再繼續(xù),時(shí)至今日,已經(jīng)過去十幾年,與新版操作系統(tǒng)和新版NSIS(3.0X)出現(xiàn)了各種不兼容和BUG,其中最典型的莫過于在vnsiedit中編輯好腳本后使用“編譯并運(yùn)行”功能,會(huì)出現(xiàn)請(qǐng)求的操作需要提升,代碼740系統(tǒng)警告并停止執(zhí)行,

關(guān)于HM NISEDIT在新版系統(tǒng)下編譯并運(yùn)行提示權(quán)限不足問題的解決方案

文章插圖
經(jīng)過分析,我個(gè)人認(rèn)為這與新操作系統(tǒng)安全機(jī)制更新有直接關(guān)系,說到這里,又不得不提及windows的用戶帳戶控制(UAC)機(jī)制,從 Windows Vista開始,微軟引入了額外的安全級(jí)別(UAC),要求在安裝應(yīng)用程序完成其他任務(wù)之前提示用戶輸入管理密碼,以標(biāo)準(zhǔn)用戶身份登錄到 Windows Vista 的用戶(Vista 的默認(rèn)登錄名)只能寫入磁盤上的特定位置 。在 Windows 7 及更高版本上,UAC 的侵入性比在 Vista 上要小的多 。但這些安全機(jī)制的更改,仍然讓HM VNSIEDIT這類開發(fā)應(yīng)用于XP及更低系統(tǒng)的應(yīng)用出現(xiàn)了各種不兼容 。而當(dāng)前新開發(fā)應(yīng)用應(yīng)對(duì)UAC控制的主要辦法是為程序配置嵌入程序清單,注明執(zhí)行級(jí)別!至于開發(fā)于小二十年前的VNSIEDIT,由于受當(dāng)時(shí)開發(fā)環(huán)境所限,根本沒有嵌入完善的程序清單,這是當(dāng)前在使用中會(huì)出現(xiàn)需要提升權(quán)限的直接原因!
解決方案:
既然原因找到,那接下來(lái)就是解決問題了,沒有程序清單,有兩個(gè)解決方案,1.重新編譯Vnsiedit,為其嵌入完善的程序清單 。2.直接為現(xiàn)有的Vnsiedit配置外部清單 。因?yàn)槲覀兪窃诮鉀Q當(dāng)前的使用bug,而不是為新系統(tǒng)重新改良Vnsiedit的整體兼容性,所以第二個(gè)方案就成了不二選擇!
所謂程序清單,其實(shí)是一個(gè)XML文件,正常情況下會(huì)在程序或應(yīng)用編譯時(shí)被嵌入其中,當(dāng)然,如果你不嫌棄業(yè)余或不優(yōu)雅,外置清單也是可以使用的!具體到NSIS中,實(shí)戰(zhàn)腳本如下:
#編寫:水晶石#給vnsiedit添加外部程序清單并強(qiáng)制優(yōu)先使用OutFile 'Nsismanifest.exe'SectionGetTempFileName $R0FileOpen $1 $R0 "w"  #程序清單其實(shí)是一個(gè)XML文件,這里將內(nèi)容按照標(biāo)準(zhǔn)格式寫入臨時(shí)文件后再去更名   FileWrite $1 '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>$\r$\n'   FileWrite $1 '<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">$\r$\n'   FileWrite $1 '    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">$\r$\n'   FileWrite $1 '        <security>$\r$\n'   FileWrite $1 '            <requestedPrivileges>$\r$\n'   FileWrite $1 '                <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>$\r$\n'   FileWrite $1 "            </requestedPrivileges>$\r$\n"   FileWrite $1 "        <security>$\r$\n"   FileWrite $1 "    </trustInfo>$\r$\n"   FileWrite $1 "</assembly>>$\r$\n"   FileClose $1   CopyFiles /SILENT $R0 "VNISEdit.exe.manifest"            ; 復(fù)制臨時(shí)文件至目標(biāo)文件位置并更名   Delete $R0  SetRegView 64   #注意系統(tǒng)重定向  #關(guān)鍵一步,寫入?yún)?shù),強(qiáng)制程序優(yōu)先使用程序外部清單  WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" "PreferExternalManifest" 0x00000001SectionEnd

經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀