一般情況下渠羞,默認(rèn)的安裝目錄會(huì)是C:\Program Files或C:\Program Files (x86)票从,用戶沒(méi)有修改UAC的話暮现,我們的程序安裝到這兩個(gè)目錄下后嘹承,對(duì)自己目錄的文件進(jìn)行添加/刪除等操作是需要權(quán)限的,有時(shí)候這點(diǎn)很煩人捌刮,尤其是我們需要在自己目錄寫(xiě)入一些配置的時(shí)候碰煌。
常用做法是把程序的數(shù)據(jù)、配置這些需要修改的內(nèi)容绅作,放到 %userprofile%下去芦圾,這里沒(méi)有權(quán)限要求。
解決了這類(lèi)問(wèn)題俄认,還是有另一類(lèi)問(wèn)題沒(méi)能解決个少,就是有時(shí)需要對(duì)程序進(jìn)行一些小修復(fù)洪乍,比如某個(gè)文件進(jìn)行一下升級(jí)等等,這個(gè)時(shí)候就需要?jiǎng)拥桨惭b目錄了夜焦。
彈出權(quán)限要求的框是可以解決這種問(wèn)題壳澳,但是有沒(méi)有更好一些,不打擾用戶的做法呢茫经?
其實(shí)我們可以在程序即將安裝完成時(shí)巷波,由安裝包把我們的安裝目錄進(jìn)行一些權(quán)限的修改,讓普通用戶權(quán)限也能對(duì)這個(gè)目錄進(jìn)行文件添加/刪除等操作卸伞,這樣后續(xù)我們程序的修復(fù)處理就會(huì)方便很多抹镊,做升級(jí)也會(huì)更容易一些。
以NSIS制作的安裝包為例荤傲,只需要引入 AccessControl這個(gè)插件 垮耳,然后在你的安裝代碼中,在安裝目錄的文件已經(jīng)全部創(chuàng)建和釋放完畢后遂黍,調(diào)用下面的函數(shù)設(shè)置下安裝目錄的權(quán)限即可:
AccessControl::GrantOnFile "$INSTDIR" "(AU)" "FullAccess"
這里的AU表示Authenticated Users用戶組
最后我們安裝之后氨菇,打開(kāi)安裝目錄的屬性看看,是不是如下所示:
自己試試往這個(gè)目錄增加/刪除文件妓湘,已經(jīng)不會(huì)彈出權(quán)限提示框了!