




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
安裝前設(shè)立界面公司標(biāo)記在OnBegin函數(shù)中,添加如下腳本:SetTitle(IFX_PRODUCT_NAME+"-Infomedia",0,BACKGROUNDCAPTION);安裝中安裝.netRegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);if(RegDBKeyExist("SOFTWARE\\Microsoft\\.NETFramework\\policy\\v4.0")<0)then if(AskYesNo("尚未安裝.netframework4.0!\n是否安裝?",YES))then if(LaunchAppAndWait(SUPPORTDIR^"dotNetFx40_Full_x86_x64_en.exe","/norestart",WAIT)<0)then SprintfBox(MB_OK,".NET安裝","安裝.net框架發(fā)生意外!"); else InstallNet=TRUE; endif;elseInstallNet=FALSE;endif;else endif;注:InstallNet在開始定義BOOL類型修改OnFirstUIAfter中的腳本以判斷是否重啟。vbs控制IIS直接使用adsutil.vbsIIS自帶的腳本來做的.基本上IIS的所有操作都可以用這個(gè)腳本完畢.目錄在C:\inetpub\AdminScriptsServerManagerCmd.exe管理安裝服務(wù)器角色參數(shù)名稱:修改IIS中ISAPI和CGI限制%windir%\\system32\\inetsrv\\appcmd.exesetconfig/section:isapiCgiRestriction/[path='C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll'].allowed:True控制文本框自定義界面,假如控制文本框此時(shí),當(dāng)選擇文本框時(shí),便可取消其它選項(xiàng)的狀態(tài)。多語言安裝不同語言的安裝文獻(xiàn)放到不同的Components里,然后設(shè)立相應(yīng)的安裝語言條件即可獲取安裝環(huán)境語言獲取Version信息讀取ProductVersionPropertyInstallshield獲取安裝包版本的系統(tǒng)變量為IFX_PRODUCT_VERSION打開對(duì)話框的時(shí)候按某個(gè)途徑打開打開某一個(gè)途徑的文獻(xiàn)夾用這個(gè)函數(shù)ShowProgramFolder(szFolder,nCommand);判斷服務(wù)狀態(tài)ServiceGetServiceStateInstallshield環(huán)境變量的追加與刪除======環(huán)境變量的追加與刪除======
======環(huán)境變量的添加或追加======*問題:如何能在安裝包中添加環(huán)境變量,而不用用戶手動(dòng)在我的電腦/屬性/高級(jí)/環(huán)境變量中設(shè)立,特別是,如何能判斷已有的環(huán)境變量,如Path,在不改變已有的環(huán)境變量的內(nèi)容的基礎(chǔ)上,進(jìn)行追加呢?
*解決方案:添加環(huán)境變量時(shí),可以通過注冊(cè)表中相應(yīng)位置寫鍵值的方式完畢:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\SessionManager\Environment.
一方面判斷Path是否存在,假如不存在,創(chuàng)建,假如存在,已有的內(nèi)容進(jìn)行追加。追加的方法參考如下代碼:
functionAddPath()
NUMBERnResult,nType,nSize,nvSize,nvType;
STRINGstrResult,szkey,szNumName,szNumValue,nRootKey,szPath,szPath2;
STRINGTITLE,szFormat;
begin
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
szkey="SYSTEM\\ControlSet001\\Control\\SessionManager\\Environment";
//hasnothekey,thencreatethekey
if(RegDBKeyExist(szkey)<0)then
if(RegDBCreateKeyEx(szkey,"")<0)then
MessageBox("RegDBCreateKeyExfailed.",SEVERE);
returnFALSE;
endif;
endif;
//添加系統(tǒng)途徑
RegDBGetKeyValueEx(szkey,"Path",nvType,szPath,nvSize);
ifszPath!=""then
PathSet(szPath);
if(PathAdd(TARGETDIR^"\\scratch\\bin","",FULL,AFTER)<0)then
MessageBox("Unabletoaddtopathbuffer.",SEVERE);
abort;
endif;
PathGet(szPath);
Disable(LOGGING);
if(RegDBSetKeyValueEx(szkey,"Path",REGDB_STRING,szPath,-1)<0)then
MessageBox("RegDBSetKeyValueExfailed.",SEVERE);
returnFALSE;
endif;
Enable(LOGGING);
else
szPath=TARGETDIR^"\\scratch\\bin";
//Setakeynameandavalueassociatedwithit.
Disable(LOGGING);
if(RegDBSetKeyValueEx(szkey,"Path",REGDB_STRING,szPath,-1)<0)then
MessageBox("RegDBSetKeyValueExfailed.",SEVERE);
returnFALSE;
endif;
Enable(LOGGING);
endif;
end;
======卸載時(shí)如何刪除追加的環(huán)境變量的問題======
*問題:安裝包卸載時(shí),如何能不改變已有的環(huán)境變量的內(nèi)容,只是刪除追加的環(huán)境變量?
*解決方案:參考如下,特有的關(guān)鍵字刪除即可,案參考以下代碼片段,即可實(shí)現(xiàn)。
functionDelPath()
NUMBERnResult,nType,nSize,nvSize,nvType;
STRINGstrResult,szkey,szNumName,szNumValue,nRootKey,szPath,szPath2;
begin
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
szkey="SYSTEM\\ControlSet001\\Control\\SessionManager\\Environment";
//添加系統(tǒng)途徑
RegDBGetKeyValueEx(szkey,"Path",nvType,szPath,nvSize);
ifszPath!=""then
PathSet(szPath);
PathDelete("scratch",PARTIAL);
endif;
end;
======追加方式的卸載問題======問題:當(dāng)卸載的時(shí)候,卻發(fā)生了一件事情,那就是,本來系統(tǒng)已有的環(huán)境變量Path也被自動(dòng)刪除了,這會(huì)影響到其他軟件的使用。
解決方案:本來,installsheild會(huì)記錄所做的操作在log信息中,卸載時(shí),會(huì)自動(dòng)進(jìn)行清理動(dòng)作。
那么如何才干避免呢?RegDBSetKeyValueEx函數(shù)調(diào)用之前,可以先Disable(LOGGING);
調(diào)用之后,在Enable(LOGGING);即可解決這個(gè)問題。======Dos命令無法使用的問題======
*問題:所有的dos命令,如ping不能使用了。
*解決方案:在網(wǎng)上查找,只找到問題,沒有搜索到解決方案,于是,只能一一查看Help,發(fā)現(xiàn)RegDBSetKeyValueEx的第三個(gè)參數(shù)引來的問題,需要修改第三個(gè)參數(shù)為REGDB_STRING_EXPAND,由于在XP下,path具有一個(gè)%SystemRoot%的相對(duì)途徑,假如使用了REGDB_STRING,所有的dos命令將都不能使用,此時(shí),在dos下輸入path一看,該替換成絕對(duì)途徑的地方都沒有替換掉,IS程序里鍵值設(shè)立時(shí)候的類型問題,REGDB_STRING是不結(jié)識(shí)相對(duì)途徑的,換成REGDB_STRING_EXPAND就可以了。反復(fù)性安裝basic
MSI用basic
MSI的
工程,custom
action
and
sequences里的maintenancewelcome中conditions設(shè)立為0,然后readyToInstall里設(shè)立成Not
PATCH
Or
IS_MAJOR_UPGRADE
我就是用這個(gè)方法解決的獲取安裝包途徑SETUPEXEDIR可以直接獲得反復(fù)性安裝探討通過刪除這兩個(gè)CA,安裝后注冊(cè)表Unistall途徑下只有一個(gè)安裝值,并且為空可以在安裝完畢時(shí),用腳本刪掉即可實(shí)現(xiàn)InstallscriptMSI工程的反復(fù)性安裝,對(duì)于卸載,暫時(shí)沒有更好的方法去實(shí)現(xiàn)(無非就是直接刪除文獻(xiàn)罷了)顯示安裝進(jìn)度內(nèi)容SetStatusWindow(-1,"正在。。。。,請(qǐng)稍候...");MSU文獻(xiàn)安裝if(FeatureIsItemSelected(MEDIA,szMediaServer)=1)thenif(SYSINFO.bIsWow64)thenLaunchAppAndWait("wusa.exe",TARGETDIR+"MediaServer\\Windows6.0-KB934518-x64-Server.msu",LAAW_OPTION_WAIT);elseLaunchAppAndWait("wusa.exe",TARGETDIR+"MediaServer\\Windows6.0-KB934518-x86-Server.msu",LAAW_OPTION_WAIT);endif;endif;LaunchAppAndWait
獲取執(zhí)行返回值Uac安裝后安裝重啟后繼續(xù)安裝很多朋友做安裝包的時(shí)候,所打包的軟件需要.NETFramework之類的環(huán)境,他們會(huì)檢測(cè)系統(tǒng)是否已經(jīng)安裝了.NET,假如沒有,則調(diào)用.NET安裝包來安裝。但是.NET安裝完是需要重啟動(dòng)的,一般來說,我們都推薦使用/q/norestart的靜默安裝函數(shù)來使重啟動(dòng)推遲到安裝結(jié)束時(shí),使用如下:
LaunchAppAndWait(SUPPORTDIR^"dotNetFx40_Full_x86_x64.exe","/q/norestart",WAIT);
.NET在重啟后才干生效,但是假如在安裝完.NET之后的安裝行為中立刻需要使用.NET特性,那么必須讓先電腦重新啟動(dòng),但是重啟后讓用戶再次點(diǎn)擊setup.exe來繼續(xù)安裝是不和諧的行為,假如可以在重啟后自動(dòng)調(diào)用安裝包繼續(xù)下一步安裝,那該多么好啊。
因此我的想法是:將setup.exe的途徑寫入到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
鍵值下,這樣會(huì)在你的電腦重啟后,自動(dòng)運(yùn)營(yíng)你的setup.exe來繼續(xù)安裝。
記得在安裝結(jié)束時(shí),寫腳本來刪除這個(gè)鍵值,不然每次電腦開機(jī)都要運(yùn)營(yíng)這個(gè)setup.exe啦安裝完畢調(diào)用重啟界面修改OnFirstUIAfter()函數(shù)里的腳本:安裝后刷新環(huán)境變量#define
WM_WININICHANGE
0x001A
#define
HWND_BROADCAST
0xffff
szEnv
=
"Environment";
pEnv
=
&szEnv;
SendMessage
(HWND_BROADCAST,
WM_WININICHANGE,
0,
pEnv
);卸載自動(dòng)編譯、打包版本機(jī),SVN,融合起來,自動(dòng)編譯和打包容易了就。TFS的沒有弄過。我們用的是SVN,將SVN、CruiseControl和Installshied整合在一起,天天檢查更新、自動(dòng)集成、編譯,然后打包C#自動(dòng)編譯com加ISWiAutomation19.dll
引用
然后
var
proj
=
new
ISWiAuto19.ISWiProject();
proj.OpenProject(projPath);
proj.ProductVersion
=
version;
proj.SaveProject();
用前Regsvr32
ISWiAutomation19.dll
/i
c#的項(xiàng)目
build
標(biāo)簽中
platForm
target
要選x86錯(cuò)誤解決安裝完畢時(shí)提醒1603錯(cuò)誤啟動(dòng)兩個(gè)服務(wù):LaunchAppAndWait("","netstart\"WebManagementService\"",LAAW_OPTION_WAIT|LAAW_OPTION_HIDDEN);LaunchAppAndWait("","netstartaspnet_state",LAAW_OPTION_WAIT|LAAW_OPTION_HIDDEN);記錄安裝日記合用工程
BasicMSI,InstallScriptMSI
操作系統(tǒng)
所有的Windows
摘要
要產(chǎn)生一個(gè)記錄安裝過程的日記文獻(xiàn),需要在命令行模式下用/l運(yùn)營(yíng)MSI包。日記文獻(xiàn)可被用來診斷安裝失敗或未定義行為的因素。
詳述
要記錄MSI安裝包的運(yùn)營(yíng)過程,你需要使用/l(可隨著更多開關(guān)使用,見下表),同時(shí)也需要提供日記文獻(xiàn)途徑(注意必須為絕對(duì)途徑)。
下面的例子表白如何產(chǎn)生一個(gè)日記文獻(xiàn)以包含最具體的安裝日記信息。
msiexec/i"C:\mystuff\package.msi"/l*v"d:\placeforlogs\package.log"
下表是可以和/l一起使用的開關(guān)ModifierDescriptioniStatusmessages-Indicateswhenactionsarestartedandstopped.wNon-fatalwarningseAllerrormessagesaStartupofactionsrAction-specificrecordsuUserrequestscInitialUIparametersmOut-of-memoryorfatalexitinformationoOut-of-disk-spacemessagespTerminalpropertiesvVerboseoutputxExtradebugginginformation--onlyavailableonWindowsServer2023+Appendtoexistingfile!Flusheachlinetothelog*Wildcard,logallinformationexceptforthevandxoptions.Toincludethevandxoptions,specify"/l*vx".其他示例
Keeptrackofthesequenceinwhichactionsstartandstopduringuninstallation:
msiexec/x{00010001-0001-0001-0001}/li"d:\logdir\package.log"
僅記錄錯(cuò)誤:
msiexec/i"C:\mystuff\package.msi"/le"d:\placeforlogs\package.log"
Logeventsthataremoreminuteinscopethantheactions并記錄內(nèi)存局限性和磁盤空間錯(cuò)誤:
msiexec/jm"C:\mystuff\package.msi"/lvmo"d:\placeforlogs\package.log"
再安裝結(jié)束時(shí)獲得一份所有屬性和其值的列表,但是追加到package.log中(而非替換之)
msiexec/i"C:\mystuff\package.msi"/lp+"d:\placeforlogs\package.log"
通過setup.exe產(chǎn)生MSI運(yùn)營(yíng)日記
假如你無法直接訪問MSI文獻(xiàn)(比如只有單一的壓縮的setup.exe),你可以使用setup.exe的/v開關(guān)來傳遞參數(shù)給msiexec。值得注意的是日記記錄只會(huì)MSI的運(yùn)營(yíng)記錄,而不會(huì)記錄來自setup.exe自身的動(dòng)作(以及instmsia.exe或者instmsiw.exe自身的動(dòng)作)。
注意點(diǎn):
1.在/v和他的參數(shù)間不能有空格。
2.整個(gè)參數(shù)必須被引號(hào)包圍。
3.參數(shù)中假如有引號(hào),則需要使用用轉(zhuǎn)義符\。
下面的例子表白如何使用setup.exe產(chǎn)生一個(gè)日記文獻(xiàn)以包含最具體的安裝日記信息
setup.exe/v"/l*v\"d:\placeforlogs\package.log\""注意工程文獻(xiàn)去掉只讀屬性卸載失敗提醒錯(cuò)誤在改為YES即可升級(jí)安裝解釋在InstallShield的高級(jí)培訓(xùn)課程中,我們常談到的掌握MSI工程的四大核心內(nèi)容,其中Condition就是其中之一。今天我們對(duì)Condition再次做一個(gè)總結(jié):初次安裝:NotInstalled修改,修復(fù)或刪除:Installed刪除(卸載):REMOVE維護(hù)或修復(fù):InstalledANDNotREMOVE小版本升級(jí):IS_MINOR_UPGRADE大版本升級(jí):IS_MAJOR_UPGRADE上述合用于InstallShield的BasicMSI工程和InstallScriptMSI工程。安裝卸載舊版本(淘寶)InstallShield安裝新的打包程序時(shí),默認(rèn)會(huì)提醒下面的對(duì)話框,大意是說已經(jīng)安裝了產(chǎn)品的另一個(gè)版本,要用戶手動(dòng)去卸載老版本,不是很和諧。下面是對(duì)InstallShield在安裝新版本時(shí)自動(dòng)卸載老版本的一些嘗試,重要是InstallScript程序的編寫。1.一方面要將InstallationDesigner–》Upgrades–》PrepareSetupForUpgradeScenarios–》UpgradeWindowsInstallerSetup–》common下的Small/MinorUpgradeSettings選擇為Don’tpromptuser,justinstalltheupgrade。這樣不會(huì)出現(xiàn)上面的提醒框,繼續(xù)下面的卸載和安裝。
2.下一步是要對(duì)OnResumeUI事件進(jìn)行響應(yīng),重要是OnResumeUIBefore和OnResumeUIAfter。3.在OnResumeUIBefore中完畢老版本的卸載,腳本如下:
//---------------------------------------------------------------------------
//OnResumeUIBefore
//
//TheOnResumeUIBeforeeventiscalledwhenenduserrunsinstallationthat
//isperformingaresumedinstall.Usuallythishappensbyspecifying
//apropertylikeREINSTALLorADDLOCALatthecommandlinewhenthe
//productisalreadyinstalled.Afterthisfunctionreturns,
//ComponentTransferDataiscalledtoperformfiletransfer.
//---------------------------------------------------------------------------
functionOnResumeUIBefore()
stringszfilename,szmsg1,szmsg2;
intnresult;
STRINGszDir,szIcon;
beginnresult=MessageBox("新版本安裝之前將卸載舊版本,是否繼續(xù)?",MB_YESNO);
if(nresult=IDNO)then
abort;
endif;szfilename=UNINSTALL_STRING+"/UNINSTALL/hide_progress";
nresult=StrFind(szfilename,".exe");
ifnresult>=0then
StrSub(szmsg1,szfilename,0,nresult+4);
StrSub(szmsg2,szfilename,nresult+4,200);
LongPathToQuote(szmsg1,FALSE);
LongPathToQuote(szmsg2,FALSE);
//szfilename="\""+szmsg1+"\""+szmsg2;
endif;if(LaunchAppAndWait(szmsg1,szmsg2,LAAW_OPTION_WAIT_INCL_CHILD|LAAW_OPTION_WAIT)<0)then
MessageBox("舊版本卸載失敗",MB_OK);
abort;
else
WaitForApplication(LAAW_PROCESS_INFORMATION.hProcess,LAAW_PROCESS_INFORMATION.dwProcessId,INFINITE,LAAW_OPTION_WAIT_INCL_CHILD|LAAW_OPTION_WAIT);
endif;szIcon=DesktopFolder;
DeleteFolderIcon(szIcon,"AliProbe");szDir=INSTALLDIR+"AliProbeV1.1";
DeleteDir(szDir,ALLCONTENTS);
end;
需要注意的地方是,在調(diào)用LaunchAppAndWait方法等待老版本卸載完畢的時(shí)候,一定要加上LAAW_OPTION_WAIT_INCL_CHILD,重要是由于卸載的過程是WindowsInstall啟動(dòng)卸載程序,所以一定要等待WindowsInstall的子進(jìn)程結(jié)束,否則將不能等待。4.在OnResumeUIAfter中完畢新版本的安裝,腳本如下:
//---------------------------------------------------------------------------
//OnResumeUIAfter
//
//TheOnResumeUIBeforeeventiscalledwhenenduserrunsinstallationthatis
//performingaresumedinstall.Usuallythishappensbyspecifyingaproperty
//likeREINSTALLorADDLOCALatthecommandlinewhentheproductisalready
//installed.Inthehandler,installationusuallydisplaysUIthatwill
//informenduserthatReinstallationhasbeencompletedsuccessfully.
//---------------------------------------------------------------------------
functionOnResumeUIAfter()
STRINGnoUse;
NUMBERszProcessId;
NUMBERnvProcessHandle;//Handletoaprocess
NUMBERnvModuleHandle;//Handletoaprocessmodule
STRINGszModuleName;//Modulefilename
NUMBERnvBytesRequired;beginszProcessId=GetCurrentProcessId();
ifszProcessId!=0then
ifProcessRunning(noUse,szProcessId,szModuleName)=TRUEthen
LaunchApp(szModuleName,"/hide_progress");
else
MessageBox("自動(dòng)安裝新版本碰到問題,請(qǐng)?jiān)俅芜\(yùn)營(yíng)安裝文獻(xiàn)完畢安裝。",MB_OK);
endif;
else
MessageBox("自動(dòng)安裝新版本碰到問題,請(qǐng)?jiān)俅芜\(yùn)營(yíng)安裝文獻(xiàn)完畢安裝。",MB_OK);
endif;
end;
這里是通過GetCurrentProcessId得到當(dāng)前進(jìn)程的Id,并調(diào)用ProcessRunning獲取當(dāng)前進(jìn)程模塊的完整途徑。5.ProcessRunning的腳本如下:
//////////////////////////////////////////////////////////////////////////////
//
//Function:_Process_Running
//
//Description:Determinesifthespecifiedprocessisrunninginmemory.
//
//Parameters:szAppName-Nameoftheapplicationtocheck.
//nvFindProcessId-IDoftheprocesstofind.
//szFindModName-NameoftheModuleofthefoundprocess
//
//Returns:TRUE-Theprocessisrunning.
//FALSE-Theprocessisnotrunning.
//
//////////////////////////////////////////////////////////////////////////////functionBOOLProcessRunning(szAppName,nvFindProcessId,szFindModName)
BOOLbvRunning;//Processisrunning
NUMBERnvProcessIDs(512);//ArrayofprocessIDs
NUMBERnvBytesReturned;//NumberofbytesreturnedinprocessIDarray
NUMBERnvProcesses;//Numberofprocessesrunning
NUMBERnvIndex;//Loopindex
NUMBERnvProcessHandle;//Handletoaprocess
NUMBERnvModuleHandle;//Handletoaprocessmodule
NUMBERnvBytesRequired;//Numberofbytesrequiredtostorevalues
POINTERpvProcessIDs;//PointertoprocessIDarray
STRINGsvModuleName;//Modulename
STRINGsvFileName;//Modulefilename
begin
//Thepsapi.dllreadstheWindowsNTperformancedatabase.TheDLL
//ispartoftheWin32SDK.ifUseDLL(WINSYSDIR^PSAPI_FILE)<0then
//Couldnotloadpsapi.dll.MessageBox("ERROR:Couldnotload["+WINSYSDIR^PSAPI_FILE+
"].",SEVERE);returnFALSE;
endif;//GetthePIDsofallcurrentlyrunningprocesses.pvProcessIDs=ArrayToPointer(nvProcessIDs);EnumProcesses(pvProcessIDs,512,nvBytesReturned);//DeterminethenumberofprocessIDsretrieved.EachprocessID
//isPROCESSID_LENGTHbytes.nvProcesses=nvBytesReturned/PROCESSID_LENGTH;//Gettheexecutableassociatedwitheachprocess,andcheckif
//itsfilenamematchestheonepassedtothefunction.fornvIndex=1tonvProcesses
//Getahandletotheprocess.nvProcessHandle=OpenProcess(PROCESS_QUERY_INFORMATION|
PROCESS_VM_READ,0,nvProcessIDs(nvIndex));ifnvProcessHandle!=0then
//Getahandletothefirstmoduleintheprocess,which
//shouldbetheexecutable.ifEnumProcessModules(nvProcessHandle,nvModuleHandle,
PROCESSID_LENGTH,nvBytesRequired)!=0then
//Getthepathofthemodule.ifGetModuleFileNameExA(nvProcessHandle,nvModuleHandle,
svModuleName,SizeOf(svModuleName))!=0then
//Extractthefilename(withoutanextension)from
//thepath.//AddbyQianShiat2023.6.23
//Getmodulenamebyprocessid.
ifnvProcessIDs(nvIndex)=nvFindProcessIdthen
szFindModName=svModuleName;
bvRunning=TRUE;
gotoProcessRunningEnd;
endif;ParsePath(svFileName,svModuleName,FILENAME_ONLY);ifStrCompare(svFileName,szAppName)=0then
//Theprocessmodulematchestheapplication
//namepassedtothefunction.bvRunning=TRUE;gotoProcessRunningEnd;
endif;
endif;
endif;
endif;
endfor;ProcessRunningEnd:ifUnUseDLL(PSAPI_FILE)<0then
MessageBox("ERROR:Couldnotunload["+WINSYSDIR^PSAPI_FILE+
"].",SEVERE);returnFALSE;
endif;returnbvRunning;
end;
程序的功能重要是枚舉當(dāng)前的進(jìn)程Id,并通過Id匹配來得到Id相應(yīng)的Modulename,本函數(shù)同樣可以判斷某個(gè)name的進(jìn)程是否正在運(yùn)營(yíng)。以上就是本人對(duì)用IS腳本完畢安裝新版本前卸載老版本的方法,假如大家有其他好的方法,請(qǐng)多多指教。原文鏈接自帶更新升級(jí)問題匯總1.當(dāng)安裝程序需要?jiǎng)h除一些文獻(xiàn)的時(shí)候,需要做MajorUpgrade,新安裝之前必須卸載舊版本2.Dll文獻(xiàn)升級(jí)必須更改版本號(hào)注冊(cè)表相應(yīng)的反映"HKLM\SOFTWARE\Classes\Installer\Products\5BDC99C4525D2BF4B80FC1C7CD0A77FB"掌管安裝語言類型,2新版本安裝也會(huì)檢測(cè)此值)"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{4C99CDB5-D525-4FB2-8BF0-1C7CDCA077BF}"判斷是否安裝;1."HKLM\SOFTWARE\Classes\Installer\Products\5BDC99C4525D2BF4B80FC1C7CD0A77FB"2."HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\InstallShield_{4C99CDB5-D525-4FB2-8BF0-1C7CDCA077BF}"至更改2后:(控制面板可卸載)本安裝包再次安裝,會(huì)安裝Products自動(dòng)選擇安裝語言新安裝包則會(huì)查找Products項(xiàng)并提醒已安裝另一版本;更改2與1后,任意版本安裝都與初次安裝同樣(控制面板不可卸載)學(xué)習(xí)鏈接一個(gè)比較完整的案例對(duì)IIS的使用有所講解InstallShieldx:用腳本創(chuàng)建虛似目錄、ISAPI篩選器、web服務(wù)擴(kuò)展1創(chuàng)建虛似目錄
創(chuàng)建一個(gè)InstallScriptProject,展開“ServerConfiguration->InternetInformationServices”,直觀的點(diǎn)擊右鍵創(chuàng)建新的虛似目錄。問題又出現(xiàn)了,當(dāng)本機(jī)沒有安裝IIS的時(shí)候,安裝包顯示一個(gè)錯(cuò)誤信息直接就退出了,幫主說要先檢測(cè)本機(jī)有沒有IIS,沒有的話要跳出對(duì)話框讓用戶選擇是繼續(xù)安裝還是退出安裝。被逼無奈,只能到處找資料把問題解決。找到檢測(cè)本機(jī)是否安裝IIS的腳本,如下:prototypeCheckIIS();//監(jiān)測(cè)系統(tǒng)是否安裝了IIS
functionCheckIIS()
NUMBERnvType,nvSize;
STRINGsvvalue;
begin
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
if(RegDBKeyExist("System\\CurrentControlSet\\Services\\IISADMIN")=1)
then
return(1);
else
return(0);
endif;
end;接下來就是要尋找如何用InstallScript創(chuàng)建虛似目錄了,還是上次推薦的地方,有兩篇配置IIS的文章又幫了我一個(gè)忙:
《InstallShield:xzIISConfig用于配置IIS的InstallScript腳本》《InstallShield:更新了xzIISConfig配置腳本和xzSQLDeployTools》在二幫主的幫助下寫出了創(chuàng)建虛似目錄的腳本,如下:setobjIIS_Root=CoGetObject("IIS://localhost/W3SVC/1/Root","");
if(IsObject(objIIS_Root))then
try
setobjVirtDir=objIIS_Root.Create("IISWebVirtualDir",VIRTUALDIR);
if(IsObject(objVirtDir))then
objVirtDir.Path=VIRTUALDIRPATH;
objVirtDir.AccessRead=TRUE;
objVirtDir.AccessScript=TRUE;
objVirtDir.AccessExecute=TRUE;
objVirtDir.SetInfo();
objVirtDir.AppCreate(TRUE);
objVirtDir.SetInfo();
endif;
catch
setobjVirtDir=CoGetObject("IIS://localhost/W3SVC/1/Root/"+VIRTUALDIR,"");
if(IsObject(objVirtDir))then
MessageBox("存在同名虛似目錄",WARNING);
endif;
endcatch;
endif;2創(chuàng)建ISPAI篩選器
創(chuàng)建ISAPI篩選器的腳本:setfilters=CoGetObject("IIS://localhost/W3SVC/Filters","");
if(IsObject(filters))then
try
setfilter=filters.Create("IIsFilter","jakarta");
if(IsObject(filter))then
filter.FilterDescription="jakarta";
filter.FilterPath=TARGETDIR^"isapi_redirector2.dll";
filter.FilterEnabled="TRUE";
filter.SetInfo();
filters.FilterLoadOrder="jakarta";
filters.SetInfo();
endif;
catch
setfilter=NULL;
setfilter=CoGetObject("IIS://localhost/W3SVC/Filters/jakarta","");
if(IsObject(filter))then
MessageBox("存在同名ISPAI篩選器",WARNING);
//filters.delete("IIsFilter","jakarta");
endif;
endcatch;
endif;這個(gè)腳本是二幫主幫忙下寫的,本來這個(gè)ISAPI的篩選器是創(chuàng)建在默認(rèn)web站點(diǎn)的,應(yīng)當(dāng)是檢測(cè)“setfilters=CoGetObject("IIS://localhost/W3SVC/1/Filters","")”是否存在,然后再創(chuàng)建的ISPAI篩選器的,但是調(diào)試過程中創(chuàng)建不了,只能創(chuàng)建在更上一級(jí)“IIS://localhost/W3SVC/Filters”。3創(chuàng)建web服務(wù)擴(kuò)展
web服務(wù)擴(kuò)展,這個(gè)特性是WinServer2023里IIS6.0增長(zhǎng)的新特性。我查閱了資料,說IIS5.0和IIS6.0的區(qū)別很大,并且IIS6.0把對(duì)IIS的配置數(shù)據(jù)保存在一個(gè)xml文獻(xiàn)里-c:\windows\system32下的Metabase.xml,包含IIS6.0服務(wù)器的配置信息。通過調(diào)試,發(fā)現(xiàn)web服務(wù)擴(kuò)展的數(shù)據(jù)存放在“IIS://localhost/W3SVC”節(jié)點(diǎn)下面的“WebSvcExtRestrictionList”處。用函數(shù)“AddExtensionFile”來添加web服務(wù)擴(kuò)展的文獻(xiàn)。IIsWebService.AddExtensionFileAddExtensionFile(
ExtensionFile,//要添加的web服務(wù)擴(kuò)展文獻(xiàn)
bEnable,//是否為Allowed0為允許,1為嚴(yán)禁
GroupID,//所屬組
bCanDelete,//UI里是否可以刪除,0本能刪除,1可以刪除
Description//web服務(wù)擴(kuò)擴(kuò)展的名稱
)InstallScript如下:bEnable=1;
bCanDelete=1;
setIIsWebServiceObj=CoGetObject("IIS://localhost/W3SVC","");
//IIsWebServiceObj.DeleteExtensionFileRecord(TARGETDIR^"isapi_redirector2.dll");
IIsWebServiceObj.AddExtensionFile(TARGETDIR^"isapi_redirector2.dll",bEnable,"test",bCanDelete,"test");
IIsWebServiceObj.EnableApplication("test");
IIsWebServiceObj.SetInfo;本來只要把參數(shù)bEnable設(shè)立為1,這個(gè)web服務(wù)擴(kuò)展?fàn)顟B(tài)就是“允許”,bCanDelete設(shè)立為1,UI里就應(yīng)當(dāng)是可以刪除的,但是調(diào)試當(dāng)中出發(fā)現(xiàn)并不是這樣的,無論怎么設(shè)立這兩個(gè)變量它們都是0,只能再通過EnableApplication函數(shù)把剛剛添加的文獻(xiàn)設(shè)立為允許狀態(tài),至于如何讓UI中可以刪除這個(gè)web服務(wù)擴(kuò)展,還沒有找到方法。注意:web服務(wù)擴(kuò)展,這個(gè)特性是WinServer2023里IIS6.0增長(zhǎng)的新特性,特有的屬性。假如不是這個(gè)操作系統(tǒng)餓話,安裝包在運(yùn)營(yíng)過程中會(huì)報(bào)錯(cuò)。可以先檢測(cè)本機(jī)是什么操作系統(tǒng),具體的幫助文檔可以查閱“SYSINFO”章節(jié),檢測(cè)的腳本如下:if(SYSINFO.WINNT.bWinServer2023)then
MessageBox("InstallingonWinServer2023",INFORMATION);
endif;自動(dòng)安裝與卸載IIS相關(guān)Webservice運(yùn)營(yíng)報(bào)錯(cuò),.net文獻(xiàn)夾無法訪問在
C:\Windows\Microsoft.NET\Framework\v2.0.50727
文獻(xiàn)夾下建立TemporaryASP.NETFiles文獻(xiàn)夾權(quán)限授予everyone調(diào)用C#dll環(huán)境:Installshield12,winxp,Vs2023(用vs2023試了好幾天犯錯(cuò),出現(xiàn)函數(shù)不可調(diào)用),在is12中建了installshieldinstallscript
msi工程INSTALLSHIELD中的重要代碼:prototypeSTRINGDESInterface.DESEncrypt(STRING);
//這個(gè)是對(duì)dl中l(wèi)函數(shù)的申明functionOnFirstUIAfter()
STRINGszTitle,szMsg1,szMsg2,szOption1,szOption2;
NUMBERbOpt1,bOpt2;
STRINGszFeatureName1,szFeatureName2,szFeatureName3;
STRINGszfilename,szFolder;
NUMBERnresult;
STRINGszmsg1,szmsg2;
STRINGxmlPath;
STRING
szDLLName;
OBJECTObjInvokeDll;
STRINGstrEncryptSERVER;
STRINGstrEncryptPWD;
STRINGTEMP;
begin
Disable(STATUSEX);
bOpt1
=FALSE;
bOpt2
=FALSE;
if(NeedWriteXml=TRUE)then
xmlPath=INSTALLDIR^"\\ParamSet\\DataBaseInfo.xml";
szDLLName=SUPPORTDIR^"DESInterface.dll";
setObjInvokeDll=CoCreateObjectDotNet(szDLLName,"DESInterface.DES");
//這個(gè)是加載dll對(duì)象
TEMP=
ObjInvokeDll.DESEncrypt(PWD)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 成品料運(yùn)輸合同協(xié)議書
- 酒店廚房終止合同協(xié)議書
- 借款合同主體變更協(xié)議書
- 夢(mèng)想計(jì)劃書范文600
- 合作干股合同協(xié)議書模板
- 天氣英語信息技術(shù)課件
- 2025年食品自查報(bào)告5
- 量子計(jì)算發(fā)展方案
- 閣樓買賣合同協(xié)議書
- 和老公簽合同協(xié)議書
- 小學(xué)生研學(xué)旅行展示ppt模板
- 《智慧養(yǎng)老》創(chuàng)新創(chuàng)業(yè)大賽ppt
- 小學(xué)六年級(jí)語文:《??嫉?0篇文言文》
- 冀教版三至四年級(jí)《發(fā)展柔韌性練習(xí)》評(píng)課稿
- 漢語拼音聲母韻母拼讀全表打印版
- 運(yùn)動(dòng)系統(tǒng)病例分析01
- 天津市南開區(qū)南開中學(xué)2022-2023學(xué)年物理高二下期末復(fù)習(xí)檢測(cè)試題含解析
- 澠池鋁礦礦產(chǎn)資源開采與生態(tài)修復(fù)方案
- 功與功率 課件高一下學(xué)期物理人教版(2019)必修第二冊(cè)
- 成品入庫、發(fā)貨流程圖
- 光柵安全檢查作業(yè)指導(dǎo)
評(píng)論
0/150
提交評(píng)論