本文主要是針對艾澤拉斯之海洋女神出品(四) --高級設置二 中的【完美卸載】,做出自己的看法,不針對任何人。
程序即將發佈,但面臨打包問題。花了兩天時間,在網上找資料及學習InstallShield。主要學習資料來源于海洋女神博客。最終將InstallShield 12 Premier 搭建好。馬上動手實踐,期待見證時刻。
親身下河知深淺!因爲有做程序的功底,再結合網上的資料,前段進展很是樂觀。但是,快要結束時困難來了。卸載程序!卸載快捷方式!
看了海洋女神的博客---完美卸載 一節,自己動手實踐。卸載程度時還是不行!以爲是代碼錯誤,繼續檢查,編譯,DEBUG....還是不行!關鍵問題在於:
AddFolderIcon ( szProgramFolder, szItemName, szCommandLine, szWorkingDir, szIconPath, nIcon, szShortCutKey, nFlag );
此函數中的 szCommandLine參數!
出自海洋女神博客代碼:
function OnFirstUIAfter()
STRING szfilename,szFolder ,szmsg1,szmsg2;
NUMBER nresult;
begin
//創建刪除快捷方式
szfilename = UNINSTALL_STRING +" /UNINSTALL";
nresult = StrFind(szfilename,".exe");
if nresult >=0 then
StrSub(szmsg1,szfilename,0,nresult + 4);
StrSub(szmsg2,szfilename,nresult + 4,200);
LongPathToQuote(szmsg1, FALSE );
LongPathToQuote(szmsg2, FALSE );
szfilename = "/"" + szmsg1 + "/"" +szmsg2;
endif;
AddFolderIcon(FOLDER_PROGRAMS^"Test","Uninstall",szfilename,WINDIR,"",0,"",REPLACE);
End;
我們來看給AddFolderIcon函數中的szCommandLine參數,所傳的值爲:szfilename,而szfilename = UNINSTALL_STRING +" /UNINSTALL";
經過查找幫助文檔中對UNINSTALL_STRING的解釋,這樣賦值沒問題;但後來聯想到命令行語句,隨手就查了在InstalShield中的Setup.exe命令行的解釋說明,卸載參數爲:/uninst。所以就想到既然UNINSTALL_STRING有預定義,那麼卸載程序命令也應該有預定義,要不然InstallSheild默認自帶的卸載是如何執行的;所以就在幫助文檔中,查找:UNINST開頭的,想不到真有。於是調試程序,取出UNINST的值與szfilename = UNINSTALL_STRING +" /UNINSTALL";對比之,頓時撥雲見日。原來szfilename = UNINSTALL_STRING +" /UNINSTALL"; 賦值時出現問題。問題找到,解決不用2分鐘。
經過在Win7 + InstallShield 12 調試的代碼應該爲:
szFileName
= UNINSTALL_STRING + " -UNINSTALL";
nResult = StrFind(szFileName,".exe");
if nResult >= 0 then
StrSub(szMsg1, szFileName, 0, nResult + 4);
StrSub(szMsg2, szFileName, nResult + 4,200);
LongPathToQuote(szMsg1, FALSE);
LongPathToQuote(szMsg2, FALSE);
szFileName = "\"" + szMsg1 + "\"" + szMsg2;
endif;
AddFolderIcon(FOLDER_PROGRAMS^"Test","Uninstall",szfilename,WINDIR,"",0,"",REPLACE);
在此感謝海洋女神,感謝CSDN......