NSIS 繫結檔案字尾名完整介紹

2021-10-05 11:47:55 字數 2240 閱讀 6991

nsis是常用的製作軟體安裝程式的工具,因其功能強大而很受歡迎。但很多軟體都有自己的檔案,這些檔案往往有獨特的字尾名,而且往往需要支援雙擊檔案即可開啟。這時就需要對檔案字尾名進行關聯。

dos下關聯檔案字尾名常用的指令是assocftype

我們可以看到這兩個指令的幫助內容:

顯示或修改副檔名關聯

assoc [.ext[=[filetype]]]

.ext 指定跟檔案型別關聯的副檔名

filetype 指定跟副檔名關聯的檔案型別

鍵入 assoc 而不帶引數,顯示當前檔案關聯。如果只用檔案擴充套件

名呼叫 assoc,則顯示那個副檔名的當前檔案關聯。如果不為

檔案型別指定任何引數,命令會刪除副檔名的關聯。

顯示或修改用在副檔名關聯中的檔案型別

ftype [filetype[=[opencommandstring]]]

filetype 指定要檢查或改變的檔案型別

opencommandstring 指定呼叫這類檔案時要使用的開放式命令。

鍵入 ftype 而不帶引數來顯示當前有定義的開放式命令字串的

檔案型別。ftype 僅用乙個檔案型別啟用時,它顯示那個檔案類

型目前的開放式命令字串。如果不為開放式命令字串指定,

ftype 命令將刪除那個檔案型別的開放式命令字串。在乙個

開放式命令字串之內,命令字串 %0 或 %1 被通過關聯呼叫

的檔名所代替。%* 得到所有的引數,%2 得到第乙個引數,

%3 得到第二個,等等。%~n 得到其餘所有以 nth 引數打頭的

引數;n 可以是從 2 到 9 的數字。例如:

assoc .pl=perlscript

ftype perlscript=perl.exe %1 %*

允許你啟用以下 perl 指令碼:

script.pl 1 2 3

如果不想鍵入副檔名,則鍵入以下字串:

set pathext=.pl;%pathext%

被啟動的指令碼如下:

script 1 2 3

比如,我們想讓.abc這個字尾名在windows 資源管理器裡顯示檔案型別為「某軟體的檔案」,雙擊後開啟軟體c:\program files\abc\abc.exe,就可以執行:

assoc .abc=某軟體的檔案

ftype 某軟體的檔案="c:\program files\abc\abc.exe" "%1"

其中"%1"這一引數將會被系統替換成檔案路徑。

這一定要有管理員許可權。

但是很快我們就會注意到問題:沒法自定義圖示,而且對其他軟體的字尾名執行assoc檢視內容,我們會發現關聯的都是一串英文,可windows資源管理器裡看到的卻是中文的型別。這需要通過系統登錄檔來實現。

writeregstr hkcr ".abc" "" "abc.file"

writeregstr hkcr "abc.file" "" "某軟體的檔案" ; 檔案型別名稱

writeregstr hkcr "abc.file\defaulticon" "" "$instdir\abc.ico" ; 圖示

writeregstr hkcr "abc.file\shell" "" ""

writeregstr hkcr "abc.file\shell\open" "" ""

writeregstr hkcr "abc.file\shell\open\command" "" '"$instdir\abc.exe" "%0"' ; 執行時指令,單引號裡的內容同前面ftype指令

注意不要漏掉最後一行外面的單引號

其中所有的abc.file可以換成你自己想用的名稱

解除安裝程式裡只要用對應的deleteregkey hkcr ".abc"等指令就可以去除關聯了

修改完檔案型別、圖示、命令列,卻發現桌面上的圖示仍然沒變。這是因為只有windows 資源管理器被要求重新整理圖示的時候才會重新整理,所以需要重新整理桌面圖示快取。直接上**:

!include "filefunc.nsh"

$

第二行要放在function或者section裡才能使用

擷取檔案字尾名

擷取給的檔名的字尾名 在這裡要注意可能出現的檔案是否有字尾名,例如.abc和abc.其實這兩種是沒有字尾名的,所以判斷切片 的索引位置必須有所限制 def foo filename,has dot false 獲取檔名的字尾名 param filename 檔名 param has dot 字尾名是...

獲取檔案字尾名

獲取到filename的字尾 利用lastindexof 從最後面截字尾,找到最後乙個點的索引然後加一,利用substring擷取該索引後的字串 f.getfilename substring f.getfilename lastindexof 1 lastindexof 方法有以下四種形式 pub...

檔名(字尾名)修改

就自己寫了段 來實現 檔名 字尾名 修改的小函式。剛開通部落格就把 放上來了。希望大俠看到指點一二。不勝榮幸!view code 1 2 修改檔名 3 4 原始檔全名 包括路徑 5 檔案字尾名 為空表示不修改 6 檔案後 為空表示不修改 7 返回異常訊息 8static void changeext...