實現應用程式中的並行組件共用(二)

來源:互聯網
上載者:User

當將現有組件修改為並行時,正是將它的啟用方式改為使用相對路徑和隔離全域狀態。重要的是給它一個新的 CLSID、ProgId,並且重新命名該檔案,然後將這個 CLSID、ProgId 以及新檔案名稱用於後來的並行組件。這樣做可以避免在並行版本上再註冊該組件的非並行版本而引起的衝突。並行組件和他們以前的非並行版本不向後相容。

狀態儲存

對於註冊表中儲存的狀態(設定),需要將狀態私人化為該應用程式啟動並執行上下文。可以使用 GetModuleFileName() 函數設定一個虛擬根。應對 HKLM 和 HKCU 分支執行該操作。

必須在每個版本的基礎上完成註冊設定,以獲得註冊表的隔離。登錄機碼是組件儲存其狀態的通用方法。因為在機器中可能存在組件的不同版本,因此重要的是當重新編譯時間,能儘可能容易地找到您的表項的版本。獲得一套優良的標頭檔和有用的 API,會使得這件事情變得簡單。

用下列命名規範在表項中儲存註冊狀態:

HKCU\MyCompany\MyComponent\VersionXXXX\

例如,假定一個稱為 EnableSuperCoolFeature 的配置設定有真或假的值。在註冊表中儲存該資訊的傳統方式為:

HKEY_CurrentUser\Software\MyCompany\MyComponent\

EnableSuperCoolFeature = TRUE

在並行共用情況下,應當用如下方式儲存它:

HKEY_CurrentUser\Software\MyCompany\MyComponent\Version01.01

EnableSuperCoolFeature = TRUE

另外,如果確定需要隔離每個應用程式,可以使用

HKCU\MyCompany\MyComponent\VersionXXYY\SomeApplication\\

其中“SomeApplication”是 GetModuleFileName 的傳回值。這樣做使組件能夠隔離它的設定,該設定只針對當前正在啟動並執行應用程式。

理想的情況下,應支援永久模型,以使應用程式擔負起保持使用者狀態的責任並且不更改註冊表。應用程式不必直接與組件的登錄機碼接觸。作為代替,組件應提供一些 API,以儲存或恢複與並行一致的設定。

對於全域狀態下的互動,儲存在除註冊表以外的其他位置的設定,應以並行方式儲存。這類儲存包含:

被保護的儲存 (pstore)

WinInet 快取

Microsoft SQL Server™ 或 Microsoft Jet 資料庫

安裝並行組件

安裝之前

安裝並行組件之前,必須確定在您的作業系統中是否支援它們。下列代碼檢測並行共用是否可用。如果不可用,組件必須安裝在系統目錄中。

BOOL bPlatformSupportsSideBySide(void)

{

OSVERSIONINFOEX osviex ;

osviex.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

// 若平台不支援 OSVERSIONINFOEX 結構,就不支援並行

// 在核心中,我們已經使這些修改連在一起

//

if (!GetVersionEx((OSVERSIONINFO *)&osviex))

{

return FALSE ; // 無 DLL 重新導向

}

// 然而對於 NT,則 NT4 SP4 支援 OSVERSIONINFOEX 支援,但它不支援 DLL 重新導向。

// 若 DLL 重新導向出現在將來的 NT4 SP 中,必須更新此代碼。

//

if ( (osviex.dwPlatformId == VER_PLATFORM_WIN32_NT) &&

(osviex.dwMajorVersion < 5) )

{

return FALSE ;

}

// 對於其他平台標識,假定具有並行支援

return TRUE ;

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.