共用方式為


安裝原始檔控制外掛程式

建立原始檔控制外掛程式涉及三個步驟:

  1. 使用本文件之原始檔控制外掛程式 API 參考一節中定義的函式建立 DLL。

  2. 實作原始檔控制外掛程式 API 定義的函式。 當 Visual Studio 呼叫它時,讓外掛程式提供介面和對話方塊。

  3. 藉由建立適當的登錄項目來註冊 DLL。

與 Visual Studio 整合

Visual Studio 支援符合原始檔控制外掛程式 API 的原始檔控制外掛程式。

註冊原始檔控制外掛程式

在執行中的整合式開發環境 (IDE) 可以呼叫原始檔控制系統之前,必須先找出匯出 API 的原始檔控制外掛程式 DLL。

註冊原始檔控制外掛程式 DLL

  1. SOFTWARE 子機碼中的 HKEY_LOCAL_MACHINE 機碼下新增兩個項目,指定您的公司名稱子機碼,後面接著您的產品名稱子機碼。 模式為 HKEY_LOCAL_MACHINE\SOFTWARE\<company name>\<product name>\<entry> = value。 這兩個項目一律稱為 SCCServerNameSCCServerPath。 每個都是規則的字串。

    例如,如果您的公司名稱是 Microsoft,且原始檔控制產品名為 SourceSafe,則此登錄路徑將為 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SourceSafe。 在此子機碼中,第一個項目 SCCServerName 是用來命名產品的使用者可讀取字串。 第二個項目 SCCServerPath 是 IDE 應連接到的原始檔控制外掛程式 DLL 之完整路徑。 下列提供範例登錄項目:

    範例登錄專案 範例值
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SourceSafe\SCCServerName Microsoft Visual SourceSafe
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SourceSafe\SCCServerPath c:\vss\win32\ssscc.dll

    注意

    SCCServerPath 是 SourceSafe 外掛程式的完整路徑。 您的原始檔控制外掛程式將使用不同的公司和產品名稱,但相同的登錄項目路徑。

  2. 下列選擇性登錄項目可用來修改原始檔控制外掛程式的行為。 這些項目與 SccServerNameSccServerPath 位於相同的子機碼中。

    • 如果您不希望原始檔控制外掛程式出現在 Visual Studio 的 外掛程式選擇清單中,則可以使用 HideInVisualStudioregistry 項目。 此項目也會影響自動切換至原始檔控制外掛程式。 此項目的其中一個可能用法是,如果您提供原始檔控制套件來取代原始檔控制外掛程式,但您想要讓使用者更輕鬆地從使用原始檔控制外掛程式移轉至原始檔控制套件。 安裝原始檔控制套件時,它會設定此登錄項目,以隱藏外掛程式。

      HideInVisualStudio 是 DWORD 值,設定為 1 可隱藏外掛程式,設定為 0 可顯示外掛程式。 如果未出現登錄項目,則預設行為是顯示外掛程式。

    • DisableSccManager 登錄項目可用來停用或隱藏通常出現在 [檔案>原始檔控制] 下的 [啟動<原始檔控制伺服器>] 功能表選項。 選取此功能表選項將呼叫 SccRunScc 函式。 原始檔控制外掛程式可能不支援外部程式,因此您可能想要停用或甚至隱藏 [啟動] 功能表選項。

      DisableSccManager 是 DWORD 值,設定為 0 可啟用 [啟動<原始檔控制伺服器>] 功能表選項,設定為 1 可停用功能表選項,設定為 2 可隱藏選單選項。 如果此登錄項目未出現,預設行為是顯示功能表選項。

    範例登錄專案 範例值
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SourceSafe\HideInVisualStudio 1
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SourceSafe\DisableSccManager 1
  3. 將子機碼 SourceCodeControlProvider 新增到 SOFTWARE 子機碼中的 HKEY_LOCAL_MACHINE 機碼下。

    在此子機碼下,登錄項目 ProviderRegKey 會設定為字串,代表您在步驟 1 中放入登錄中的子機碼。 模式為 HKEY_LOCAL_MACHINE\SOFTWARE\SourceCodeControlProvider\ProviderRegKey = SOFTWARE\<company name>\<product name>

    以下是此子機碼的範例內容。

    登錄項目 範例值
    HKEY_LOCAL_MACHINE\SOFTWARE\SourceCodeControlProvider\ProviderRegKey SOFTWARE\Microsoft\SourceSafe

    注意

    原始檔控制外掛程式將使用相同的子機碼和項目名稱,但值會不同。

  4. SourceCodeControlProvider 子機碼下建立名為 InstalledSCCProviders 的子機碼,然後在該子機碼下放置一個項目。

    這個項目的名稱是提供者的使用者可讀取名稱(與為 SCCServerName 專案指定的值相同),而值再次是步驟 1 中建立的子機碼。 模式為 HKEY_LOCAL_MACHINE\SOFTWARE\SourceCodeControlProvider\InstalledSCCProviders\<display name> = SOFTWARE\<company name>\<product name>

    例如:

    範例登錄專案 範例值
    HKEY_LOCAL_MACHINE\SOFTWARE\SourceCodeControlProvider\InstalledSCCProviders\Microsoft Visual SourceSafe SOFTWARE\Microsoft\SourceSafe

    注意

    您可以透過這種方式註冊多個原始檔控制外掛程式。 這是 Visual Studio 尋找所有已安裝的原始檔控制外掛程式 API 外掛程式的方式。

IDE 如何找出 DLL

Visual Studio IDE 有兩種尋找原始檔控制外掛程式 DLL 的方式:

  • 找出預設原始檔控制外掛程式,並以無訊息方式連接它。

  • 找出所有已註冊的原始檔控制外掛程式,使用者從其中選擇一個外掛程式。

    若用第一種方式找出 DLL,IDE 將在 HKEY_LOCAL_MACHINE\Software\SourceCodeControlProvider 子機碼下尋找 ProviderRegKey 項目。 這個項目的值指向另一個子機碼。 然後,IDE 在 HKEY_LOCAL_MACHINE 下的第二個子機碼中尋找名為 SccServerPath 的項目。 這個項目的值將 IDE 指向 DLL。

注意

IDE 不會從相對路徑載入 DLL (例如:.\NewProvider.DLL)。 必須指定 DLL 的完整路徑 (例如:c:\Providers\NewProvider.DLL)。 這可防止載入未經授權或假冒的外掛程式 DLL,從而增強 IDE 的安全性。

若用第二種方式尋找 DLL,IDE 將在 HKEY_LOCAL_MACHINE\Software\SourceCodeControlProvider\InstalledSCCProviders 子機碼下尋找所有項目。 每個項目都有名稱和值。 IDE 會向使用者顯示這些名稱的清單。 當使用者選擇名稱時,IDE 會尋找指向子機碼之所選名稱的值。 IDE 在 HKEY_LOCAL_MACHINE 下的子機碼中尋找名為 SccServerPath 的項目。 該項目的值將 IDE 指向正確的 DLL。

原始檔控制外掛程式需要支援兩種尋找 DLL 的方式,因此設定 ProviderRegKey,覆蓋任何先前的設定。 更重要的是,它必須將自身新增至 InstalledSccProviders 清單中,以便使用者可以選擇要使用的原始檔控制外掛程式。

注意

由於使用 HKEY_LOCAL_MACHINE 機碼,因此在指定電腦上只能將一個原始檔控制外掛程式註冊為預設原始檔控制外掛程式 (但是,Visual Studio 可讓使用者判斷他們實際想要用於特定方案的原始檔控制外掛程式)。 在安裝期間,請檢查是否已經設定原始檔控制外掛程式;如果已設定,請詢問使用者是否要將正在安裝的新原始檔控制外掛程式設定為預設。 卸載期間,請勿移除 HKEY_LOCAL_MACHINE\SOFTWARE\SourceCodeControlProvider 中所有原始檔控制外掛程式共用的其他登錄子機碼;只移除您的特定 SCC 子機碼。

IDE 如何偵測 1.2/1.3 版支援

Visual Studio 如何偵測外掛程式是否支援原始檔控制外掛程式 API 1.2 版和 1.3 版功能? 若要宣告進階功能,原始檔控制外掛程式必須實作對應的函式:

首先,Visual Studio 會藉由呼叫 SccGetVersion 來檢查傳回的值。 必須大於或等於 1.2。

接下來,Visual Studio 透過檢查 lpSccCaps SccInitialize 上的 引數,判斷是否支援特定的新功能。

如果符合這兩個條件,則可以呼叫 1.2 版和 1.3 版中支援的新函式。