众所周知silverlight OOB模式可以在浏览器中右键直接安装,
我这里介绍如何把silverlight程序做成单独的EXE安装程序。
思路:
1.命令行安装xap
2.安装完成删除控制面板中OOB自带的XAP的卸载
3.installshield安装程序卸载同时也卸载silverlight程序
准备知识:
在看这篇文章之前需要了解silverlight部署和installshield技术。
感谢:
感谢我的好友FTPWMD提供installshield技术支持。
sllauncher命令参见:
http://tech.it168.com/a2010/0810/1088/000001088696_1.shtml
installshield代码:
代码
//自定义函数
export prototype BOOL SaveUninstall(string);
export prototype BOOL RemoMveUninstall();
export prototype InstallXap();
export prototype UnInstallXap();
export prototype CheckSilverlightAndInstall();
//检测silverlight是否安装
function CheckSilverlightAndInstall()
STRING szName;
NUMBER nReturn;
begin
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
szName = "SOFTWARE\\Microsoft\\Silverlight";
nReturn = RegDBKeyExist(szName);
if(nReturn<0) then
LaunchAppAndWait (SUPPORTDIR ^"Silverlight.exe", "", WAIT);
endif;
end;
//保存卸载信息
function BOOL SaveUninstall(szpath)
STRING szName, szTitle,szValue;
NUMBER nType, nSize, nvType, nvSize;
begin
RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
szName = "UninstallString";
nType = REGDB_STRING;
nSize = -1;
RegDBGetKeyValueEx (szpath, szName, nvType, szValue, nvSize) ;RegDBSetKeyValueEx ("SOFTWARE\\chuifeng", "UnInstall", REGDB_STRING, szValue,-1);
end;
//删除xap的卸载方式
function BOOL RemoMveUninstall()
string szKEY1, svString ,svtring1;
LIST listSubKeys,listNames;
NUMBER nReturn, nResult,nvItem,nLocation;
begin
szKEY1="Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
listSubKeys = ListCreate(STRINGLIST);
listNames = ListCreate(STRINGLIST);
if ((listNames = LIST_NULL) || (listSubKeys = LIST_NULL)) then
MessageBox ("Unable to create necessary lists.", SEVERE);
abort;
endif;
RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
nReturn = RegDBQueryKey(szKEY1, REGDB_KEYS, listSubKeys );
if (nReturn >= 0) then
nReturn = ListGetFirstString (listSubKeys, svString);
while (nReturn != END_OF_LIST)
nLocation = StrFind (svString,"imd.mdrtbase.com");
if (nLocation >= 0) then //not found
svtring1=szKEY1+"\\"+svString;
SaveUninstall(svtring1) ;
RegDBDeleteKey (svtring1);
return TRUE;
endif;
nResult = ListGetNextString (listSubKeys, svString);
endwhile;
endif;
ListDestroy (listNames);
ListDestroy (listSubKeys );
end;
//安装silverlight xap
function InstallXap()
string szProgram , szCmdLine ,szXapPath,szUrl,szCommd;
begin
szProgram="C:\\Program Files\\Microsoft Silverlight\\sllauncher.exe";
szXapPath= SUPPORTDIR ^"chuifeng.xap";
szUrl= "http://www.chuifeng.com/ClientBin/chuifeng.xap";
szCommd= " /overwrite /shortcut:desktop+startmenu";
szCmdLine="/install:\"" + szXapPath + "\""+ szCommd + " /origin:" + szUrl;
LaunchAppAndWait (szProgram, szCmdLine, WAIT);
end;
//卸载silverlight xap
function UnInstallXap()
STRING szKey, szName, szValue, szTitle, szMsg,szCommand,szPament;
NUMBER nType, nSize, nvType, nvSize,nvCount,nvlength;
begin
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
szKey="SOFTWARE\\chuifeng";
szName = "Uninstall";
nType = REGDB_STRING;
nSize = -1;
if (RegDBGetKeyValueEx (szKey, szName, nvType, szValue, nvSize) < 0) then
MessageBox ("RegDBGetKeyValueEx failed.", SEVERE);
else
nvCount= StrFind (szValue, "-uninstallApp");
StrSub (szCommand, szValue, 0, nvCount);
nvlength= StrLength(szValue);
StrSub (szPament, szValue, nvCount,nvlength );
LaunchAppAndWait ("\""+szCommand+"\"", szPament, WAIT);
endif;
end;