Screenweaver被譽為最好的Flash桌面應用程式製作工具,它可以將Flash通過它的Builder轉成獨立執行的Exe、熒幕保護程式或者打包成Installer,讓使用者安裝Flash應用程式,可惜它打包出來的Installer,包括一個Uninstaller,當用Installer安裝好Flash應用程式後,Start Menu的Flash應用程式Folder會多了一個Uninstall的選項,利用它,理論上可以反安裝Flash應用程式,可惜這Uninstaller不支持中文Windows,單擊它後,出現的竟然又是Installer!
原來Builder轉成的Installer和Uninstaller是同一個文件,通過Uninstall後傳入一個參數Argument "/uninstall" 來分辨。打開Screenweaver安裝Folder下resources的install.fla,Layer initialization script的Frame 2,打開Action Panel,第48行:
if( swApplication.getCmdLineArg(1) == "/uninstall" )
在中文Windows執行下會產生的獨特問題,Uninstaller Path傳入來的參數不能夠用空白格分開,期間多了一些亂碼(例如:C:\DOCUME~1\luar\LOCALS~1\Temp\rd179.tmp|洱/uninstall|洱2464|洱),因此代碼不能夠認出參數"/uninstall",所以永遠沒有可能執行反安裝。
因此,我修改了這行代碼,直接用IndexOf找找有沒有"/uninst"這字符串來決定它是否反安裝,將這行代碼修改為:
if (swApplication.getCmdLineArg().indexOf("uninst") != -1)
注意
如果Windows本身是英文版,但預設語言是中文的話,都會有以上中文Windows的問題。
注意
以上修改反會使英文版Windows的Uninstaller無法執行,出現類似中文版情況,選Uninstall反出現Install程序。
因此最後結合兩者的代碼在if中:
if (swApplication.getCmdLineArg(1) == "/uninstall" or swApplication.getCmdLineArg().indexOf("uninst") != -1)
注意
由於應付中文版的if判斷條件是搜尋"uninst"字符串的存在,因此應用程序的名稱最好不要包含"uninst"。 |