WMEncoder SDK二次開發_第1頁
WMEncoder SDK二次開發_第2頁
WMEncoder SDK二次開發_第3頁
WMEncoder SDK二次開發_第4頁
WMEncoder SDK二次開發_第5頁
已閱讀5頁,還剩17頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、創建再分發安裝1.調用再分發程序包之前,請首先讓您的安裝例程安裝您的應用程序文件,并進行所需的設置。2.安裝WMFDist.exe。您可以使用/Q:A標志執行安靜的無人參與安裝,并在應用程序(例女如WMFDist.exe/Q:A)安裝期間不顯示再分發安裝的用戶界面。然后您的例程必須檢測結束時是否需要重新啟動重新啟動。WMFdist.exe命令行參數將WMFDist.exe作為應用程序的一部分進行安裝時,管理員或開發人員可以通過使用下列命令,來控制安裝UI顯示和重新啟動重新啟動行為:WMFdist.exe/Q:A此命令指定無人參與安裝,并且不出現任何UI或警告。注下一節中的代碼示例說明了女何在程

2、序包運行結束之后確定成功還是失敗,以及是否需要重新啟動。檢測WMFDist.exe的安裝狀態下面的代碼可用于WindowsMediaFormatSDKruntime再分發或WindowsMediaPlayer再分發程序包。安裝狀態將作為HRESULT存儲在下列位置:HKCU,SoftwareMicrosoftMediaPlayerSetup,REG_SZ,valueInstallResultHRESULT值可用于確定安裝是否成功以及是否需要重新啟動。下面的C+示例代碼可包含在一個調用安裝應用程序中。此代碼會根據組件再分發程序包中WindowsMedia安裝寫入的HRESULT值,將fSucce

3、ss和fRebootNeeded變量設置為合適的true或false。#include#include3/IfNS_S_REBOOT_REQUIREDisundefined,use0 xD2AF9.#ifndefNS_S_REBOOT_REQUIRED#defineNS_S_REBOOT_REQUIRED0 xd2af9#endif9intmain(void)10曰田HKEYhKey=NULL;BOOLfSuccess=FALSE;BOOLfRebootNeeded=FALSE;14if16171819白由202122if242526白由27282930313233343536白由ERROR_

4、SUCCESS=RegOpenKeyExA(HKEY_CURRENT_USER,SoftwareMicrosoftMediaPlayerSetup0,KEY_QUERY_VALUE,&hKey)charszResult64;DWORDdwResult=sizeof(szResult);ERROR_SUCCESS=RegQueryValueExA(hKey,InstallResult,NULL,NULL,(LPBYTE)szResult,&dwResult)sscanf(szResult,%x,&dwResult);fSuccess=SUCCEEDED(dwResult);fRebootNeed

5、ed=(NS_S_REBOOT_REQUIRED=dwResult);RegCloseKey(hKey);if(fSuccess)4/37printf(SetupSucceeded);38if(fRebootNeeded)39printf(ArestartISrequiredn);40else4142printf(ArestartISNOTrequiredn);4344白由else45printf(SetupFailed);46if(fRebootNeeded)47printf(ArestartISrequiredn);48else4950printf(ArestartISNOTrequire

6、dn);5152Lreturn0;54如果要將再分發程序包包括在您的應用程序中,則當您在安裝例程中調用該再分發程序包時,可以使用/Q:A標志。這樣會抑制用戶界面(UI)的顯示。因為WMFdist.exe程序包的設計意圖就是為了用于軟件再分發,所以該程序包會抑制自動重新啟動,不會通過用戶界面返回或通知用戶重新啟動情況。請確保使用返回注冊表的信息來執行下列操作:確定在運行WMFdist.exe之后計算機是否需要重新啟動。處理需要重新啟動的情況,以及需要重新啟動時與最終用戶的通信。下面的示例代碼可在您的安裝例程中用來以安靜模式運行再分發程序包,并在計算機必須重新啟動時通知您的安裝例程。日田/MUST

7、ADD:/Youmustaddshlwapi.libtoyourprojectsettings(link)/7日田/#include#include#include#includeusingstd:cout;usingstd:endl;#defineMAX_TIMEOUT_MS30*60*1000#defineTIME_INCREMENT250/PrototypesBOOLGoInstallWMRedist(BOOL);BOOLSystemNeedsReboot(void);voidmain(void)日田GoInstallWMRedist(TRUE);IcoutSetupiscomplete

8、;Iif(SystemNeedsReboot()申由/Writesomecodeheretoensurethatyourapplicationwill891011121314151617181920212223242526272829303132/restartthecomputer,anddelaydllregistrationsandsoon/untilaftertherestart,wherepossible.Forexample,/setaglobalflagforusebytheapplication.coutArestartISrequiredendl;elsecoutAresta

9、rtISNOTrequiredMAXTIMEOUTMS)102申由103TerminateProcess(ProcessInfo.hProcess,EFAIL);104break;105106dwTimePassed+=TIMEINCREMENT;107108109CloseHandle(ProcessInfo.hProcess);110return(TRUE);L113日田/Usedtodeterminewhetherthesystemshouldberestarted118日田/119BOOLSystemNeedsReboot(void)120日田/121日田122BOOLfNeedExi

10、sts=FALSE;123OSVERSIONINFOosvi;125124126GetVersionEx(&osvi);127128if(VERPLATFORMWIN32NT!=osvi.dwPlatformId)129申由130TCHARszIniPathMAXPATH;131132GetWindowsDirectory(szIniPath,133sizeof(szIniPath)/sizeof(TCHAR);134PathAddBackslash(szIniPath);135tcscat(szIniPath,T(wininit.ini);136137if(OxFFFFFFFF!=GetFi

11、leAttributes(szIniPath)138申由139HFILEhFile;140141if(hFile=142lopen(szIniPath,OF_READ|OF_SHARE_DENY_NONE)!143HFILEERROR)144申由osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);D);146147148149150151申由152153154155ger),156157申由158159160161申由162163164165166167168169L_lclose(hFile);elseHKEYhKey=NULL;if(ERROR_S

12、UCCESS=RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T(SystemCurrentControlSetControlSessionMana0,KEY_READ,&hKey)if(ERROR_SUCCESS=RegQueryValueEx(hKey,_T(PendingFileRenameOperations),NULL,NULL,NULL,NULL)fNeedExists=TRUE;RegCloseKey(hKey);return(fNeedExists);再分發WindowsMediaEncoder9Series軟件當您分發基于WindowsMediaEncode

13、rSDK的應用程序時,必須通過在安裝中再分發WindowsMediaEncoder,或者要求您的用戶自行安裝WindowsMediaEncoder,將WindowsMediaEncoder軟件也包括在內。如果您要再分發WindowsMediaEncoder,則必須在安裝中包括并運行WMEncoder.exe安裝文件。Microsoft網站的下載中心中提供有此文件。如果您希望最終用戶自行安裝WindowsMediaEncoder,則可以引導這些用戶訪問此網站。默認情況下,WindowsMediaEncoder安裝在C:ProgramFilesWindowsMediaComponentsEncod

14、er目錄中。WMEncoder.exe命令行參數下面幾項內容顯示了WMEncoder.exe常用的命令行參數。對于不帶UI的無人參與安裝:wmencoder.exe/Q:A對于帶有進度條的無人參與安裝:wmencoder.exe/Q檢測WindowsMediaEncoder9Series您可以通過搜索注冊表的方式,確定所安裝的WindowsMediaEncoder的版本:HKLM,SoftwareMicrosoftWindowsMediaEncoder,Version在該編碼器項下面,如果設置了Version字符串值,則可以放心地使用該字符串值作為所安裝的WindowsMediaEncoder

15、的版本。您可以使用下列注冊表項來確定WindowsMediaEncoder安裝目錄的位置:HKLM,SoftwareMicrosoftWindowsMediaEncoder,InstallDir再分發WindowsMediaPlayer9Series軟件在應用程序中檢測WindowsMediaPlayer您可以通過搜索注冊表的方式,確定所安裝的WindowsMediaPlayer的版本。HKEY_LOCAL_MACHINESoftwareMicrosoftActiveSetupInstalledComponents對于WindowsMediaPlayer6.4,請查看該項:22d6f312-b

16、0f6-11d0-94ab-0080c74c7e95對于WindowsMediaPlayer7、WindowsMediaPlayerforWindowsXP或WindowsMediaPlayer9Series,請查看該項:6BF52A52-394A-11d3-B153-00C04F79FAA6在上述任一項下面,如果IslnstallecDWORD值設置為0 x1,則可以放心地使用“Version”字符串值作為所安裝的WindowsMediaPlayer的版本。MPSetup.exe和MPSetupXP.exe命令行參數下面是幾個常用的命令行參數。對于不帶UI、不需要重新啟動或沒有重新啟動提示的

17、無人參與安裝:mpsetup.exe/q:A/c:setup_wm.exe/Q:A/R:N/P:#e這是一個標準的命令行,通常應該用于執行無人參與安裝。防止媒體庫移植:mpsetup.exe/q:A/R:N/c:setup_wm.exe/NoMigrate/P:#e對安裝程序包進行緩存,用于以后的Windows升級移植:mpsetup.exe/q:A/R:N/c:setup_wm.exe/P:#e/P:#e指定,在WindowsMediaPlayer安裝過程中應該對WindowsMediaPlayer安裝程序包進行緩存。在處理操作系統將來升級的所有命令行中,通常應該使用此參數。不應在命令行中包

18、括/P:#e的唯一一種情況為,您知道目標系統永遠不會升級為更高版本的操作系統。例如,如果您正在Windows2000上安裝WindowsMediaPlayer9Series,并且該計算機在將來的某一天可能會升級為WindowsXP,則必須在命令行中使用/P:#e。如果不使用此參數,則在WindowsXP安裝之后,WindowsMediaPlayer9Series文件會被WindowsMediaPlayerforWindowsXP的文件所覆蓋。對于安靜模式:/Q此參數用于不帶UI的無人參與安裝。取消重新啟動提示/R:N此參數表示永遠不需要重新啟動,也不出現提示。如果您忽略此命令,則無論是否已經安

19、裝該軟件,播放器都會在安裝結束時提示用戶重新啟動計算機。創建嵌套的系統還原點:/NestedRestore如果您的應用程序創建的系統還原點會將WindowsMediaPlayer還原點嵌套在應用程序還原點中,請使用此參數。不允許創建系統還原點/DisallowSystemRestore此標志會禁止系統還原點的創建。大多數情況下,對于一般的軟件再分發方案都不應該使用此標志。只有當您可以代表最終用戶作出明確選擇,不支持WindowsMediaPlayer9Series文件回滾到該播放器的更早版本時,才應該使用此標志。此標志只應在公司部署或者原始設備制造商(OEM)安裝方案中使用。注意命令行參數區分

20、大小寫。取消重新啟動提示時,必須檢查InstallResult注冊表項,并處理調用安裝應用程序中的重新啟動通知。WindowsMediaPlayer9Series還會安裝WindowsMediaFormatruntime,因此無需將MediaPlayer9Series分發程序包和WindowsMediaFormatRuntime分發程序包同時包括在一個軟件再分發程序包中。例如,如果您在安裝中包括了MPSetup.exe或MPSetupXP.exe,則無需包括WMFdist.exe。檢測MPSetup.exe和MPSetupXP.exe的安裝狀態下面的代碼可用于WindowsMediaPlaye

21、r再分發程序包。安裝狀態作為HRESULT存儲在下列位置:HKCU,SoftwareMicrosoftMediaPlayerSetup,REG_SZ,valueInstallResultHRESULT值可用于確定安裝是否成功以及是否需要重新啟動。下面的C+示例代碼可包含在一個調用安裝應用程序中。此代碼會根據組件再分發程序包中WindowsMedia安裝寫入的HRESULT值,將fSucess和fRebootNeeded變量設置為合適的true或false。#include#include/IfNSSREBOOTREQUIREDisundefined,use0 xD2AF9.#ifndefNSS

22、REBOOTREQUIRED#defineNSSREBOOTREQUIRED0 xd2af9#endifintmain(void)10日田11HKEYhKey=NULL;12BOOLfSuccess=FALSE;13BOOLfRebootNeeded=FALSE;1415if(ERROR_SUCCESS=RegOpenKeyExA(16HKEYCURRENTUSER,17SoftwareMicrosoftMediaPlayerSetup180,KEY_QUERY_VALUE,&hKey)20charszResult6421DWORDdwResultsizeof(szResult);2223if

23、(ERROR_SUCCESS=RegQueryValueExA(hKey,InstallResult,NULL,NULL,25(LPBYTE)szResult,&dwResult)27sscanf(szResult,%x,&dwResult);28fSuccessSUCCEEDED(dwResult);3738394041424344白由4546474849505152L291fRebootNeeded=(NS_S_REBOOT_REQUIRED=dwResult);31RegCloseKey(hKey);3435if(fSuccess)36白由printf(SetupSucceeded);i

24、f(fRebootNeeded)printf(ArestartISrequiredn);elseprintf(ArestartISNOTrequiredn);elseprintf(SetupFailed);if(fRebootNeeded)printf(ArestartISrequiredn);elseprintf(ArestartISNOTrequiredn);return0;WindowsMedia編碼解碼器再分發您可以更新WindowsMediaPlayer7或WindowsMediaPlayerforWindowsXP,以使得這些軟件不必依賴Internet代碼自動下載機制即可支持Wi

25、ndowsMedia9Series編碼解碼器。有一個用于此目的的編碼解碼器再分發程序包,名為WM9Codecs.exe,該程序包可用于公司和軟件部署。要在應用程序再分發安裝中使用這個程序包更新編碼解碼器,請使用下面的命令行將WM9Codecs.exe包括在內,并運行該程序包。WM9Codecsxe/Q:A這樣會啟動不帶UI的無人參與安裝。注意您必須使用WindowsMediaFormatruntime再分發部分中說明的注冊表信息,來檢查安裝成功狀態,并確定系統是否需要重新啟動來完成安裝。如果在再分發安裝中包括了WindowsMediaPlayer9Series或WindowsMediaForm

26、atruntime分發程序包,則無需包括WindowsMediaCodecs安裝程序包。關于主Interop程序集使用MicrosoftWindows.NET框架嵌入WindowsMediaPlayer控件的過程需要使用WindowsMediaPlayer主interop程序集(PIA)。PIA是一個獨特的框架程序集,其中包含了COM組件所實現的各種類型的類型定義(作為元數據)。只有類型庫的發布者才能生成真正的PIA,該PIA將成為用于與基礎COM類型進行交互的正式類型定義的單元。有關詳細信息,請參閱MSDN網站上的主Interop程序集(PIA)。與您的應用程序一起再分發主Interop程序

27、集主Interop程序集(PIA)是做為MicrosoftWindows.NET框架應用程序的一部分再分發給最終用戶的。包含一個或多個PIA的應用程序的部署與任何基于.NET的應用程序一樣,不需要在用戶計算機上注冊每個相關的COM類型庫。按照定義,PIA總是由它們的發布者進行簽名,以確保唯一性。按照它們所描述類型的唯一官方定義,您可以希望一些常用的PIA安裝在全局程序集緩存中,即使將這同一個程序集部署到應用程序目錄中也可如此。當全局程序集與本地程序集具有相同的供應商簽名時,公共語言運行庫總是會將您的應用程序指向該全局程序集緩存中的PIA。在這種情況下,您的應用程序不會受到保護,會受供應商發起的

28、版本更改的影響。最佳方法是始終安裝供應商提供的最新版本。然而,當您的應用程序需要上述保護時,則可以通過使用類型庫導入程序(Tlbimp.exe)(而不是PIA)來生成自己的interop程序集。注冊用于應用程序開發的主Interop程序集您必須使用程序集注冊工具(RegAsm.exe)和全局程序集緩存實用程序(GacUtil.exe)來注冊和安裝WindowsMediaPlayerPIA。要注冊PIA,請在命令提示符下,鍵入:regasmassemblyname在此命令中,assemblyname為要注冊的程序集的文件名。下面的示例會注冊wmppia.dllPIA。regasmC:WMSDKWMPSDK9redistwmppia.dllRegasm.exe在與原始類型庫相同的注冊表項下面添加一個用于該PIA的注冊表項。注冊了該PIA之后,使用全局程序集緩存實用程序將其安裝到全局程序集緩存(G

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論