2009-11-09 26 views
0

我想寫一個劇本NSIS,我們稱之爲現在setup.nsi,如果檢查 幾個需要dll文件已存在於$ SYSDIR

我要強調單詞「幾個」

什麼我從NSIS IfFileExists文檔明白的是,如果我輸入:

IfFileExists $SYSDIR\blabla.dll +2 +1

然後它會檢查是否blabla.dll是$ SYSDIR ..但如果我想知道,如果* .DLL從那裏安裝什麼。 nsi複製該文件(即,我是intereste的* .dll d在安裝..並且他們是很多他們..所以我不能只檢查所有名稱)存在$ SYSDIR

在卸載期間,我想然後能夠從$ SYSDIR(使用一些uninstall.log來查看我是否真的將它們複製到$ SYSDIR中,並且又是通配符問題)。

請耐心等待我,因爲我對NSIS腳本非常陌生。

回答

2

是否真的有必要寫$SYSDIR刪除?除非您的文件是系統,否則沒有理由將其置於$ __ SYS__DIR中。如果您需要使用特定版本的庫,請考慮DLL重定向(將DLL放入您的應用程序目錄並使用.local功能) - 請參閱the MSDN article on DLL redirectionSide-by-side assemblies。另外,你是從破壞用戶計算機(「已刪除:C:\ Windows \ System32 \ user32.dll」)的一個打字錯誤。

+0

+1 - 我不會嘗試通配符刪除SYSDIR中的DLL。除非有必要,否則我還會將它們保存在應用程序目錄中。 –

0

由於Piskvor提到,我不認爲你應該擔心刪除卸載程序中的系統DLL。如果您想用更新後的版本覆蓋系統DLL,您可能需要查看SetOverwrite命令。它可以讓你覆蓋文件,如果你有更新。

0

Windows XP(SP2?)及更高版本對system32有文件保護,因此您無法覆蓋那裏的系統關鍵文件。

請儘量避免這種情況。

此外,要檢查您的文件具體,看看是否有一個NSIS插件可以計算校驗和並比較它的卸載。這可能是最安全的,如果你真的需要這樣做。

我建議在其他地方安裝文件並將其添加到PATH。