我正在爲我的應用程序編寫卸載程序,並且需要檢查從哪個目錄調用卸載程序(因爲我想限制從任何其他目錄卸載)。如何獲得nsis腳本中的exe路徑?
我正在使用內置變量$EXEPATH
,但它給我C:\Users\MyUser\Local\Temp\~nsu.tmp
而不是當前目錄。
我也使用windows API GetModuleFileName
使用nsis,但它也提供相同的輸出。如何獲取可執行文件的當前目錄?
我正在爲我的應用程序編寫卸載程序,並且需要檢查從哪個目錄調用卸載程序(因爲我想限制從任何其他目錄卸載)。如何獲得nsis腳本中的exe路徑?
我正在使用內置變量$EXEPATH
,但它給我C:\Users\MyUser\Local\Temp\~nsu.tmp
而不是當前目錄。
我也使用windows API GetModuleFileName
使用nsis,但它也提供相同的輸出。如何獲取可執行文件的當前目錄?
C:\Users\MyUser\Local\Temp\~nsu.tmp
形式的臨時目錄可能是卸載程序實際運行的目錄。
爲避免無法卸載卸載程序可執行文件的問題,因爲它在運行時被鎖定(因此它需要重新啓動才能真正刪除),因此通常會將卸載程序.exe複製到臨時位置並從該位置運行它。
如果你不希望unistaller本身進叉一個臨時目錄,你可以調用這樣說:
ExecWait '"$INSTDIR\uninstaller.exe" /S _?=$INSTDIR'
的技巧是在manual描述的_?
特殊參數。
我想這將工作,如果我們從nsis腳本調用卸載程序。但在我的情況下,用戶可以直接雙擊它開始卸載。 –
讓我讓我的要求更清楚。假設我的軟件安裝目錄是** C:\ Program Files \ MySoftware **。我的所有二進制文件,dll和uninstaller.exe都將位於此目錄中。所以我希望卸載程序只能從這個目錄啓動。如果有人將uninstaller.exe複製到其他目錄,卸載應該不起作用,並且得到可執行文件目錄,我使用'$ EXEPATH',但它將tmp目錄作爲path.Using '_?'我們可以明確地設置這個tmp目錄,但我的要求不是這樣。 –
您是在尋找$ EXEDIR? – kichik
@kichik'$ EXEDIR'也給出相同的輸出。 –
這不應該。在您的NSIS版本中存在錯誤,或者您以非標準方式執行卸載程序。 – kichik