文章編號: 254957 - 上次校閱: 2006年11月21日 - 版次: 3.1

注意: 一個無權限的使用者在 Windows 2000 上執行的 MFC OLE 伺服器時,登錄更新的程式碼都可能會失敗

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
重要: 本文包含修改登錄的相關資訊。修改登錄之前請確定它備份起來,並請確定您瞭解如何在發生問題時還原登錄。如如何備份、 還原,以及編輯登錄有關,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
256986? (http://support.microsoft.com/kb/256986/EN-US/ ) Microsoft Windows 登錄的描述

在此頁中

全部展開 | 全部摺疊

徵狀

當一個 (針對範例、 非系統管理員或非-電源) 無權限的使用者在 Windows 2000 上執行標準的 Microsoft 基礎類別 (MFC) OLE 伺服器時,登錄更新失敗,且會顯示下列錯誤訊息:
「 無法更新系統登錄。請試著使用 REGEDIT"。

發生的原因

因為每次執行時的 MFC OLE 可執行伺服器,它 UpdateRegistry 在呼叫函式 COleTemplateServer 類別,就會發生這個錯誤。 MFC UpdateRegistry 函式會更新登錄項目中 HKEY_CLASSES_ROOT 應用程式和其文件型別的。程式第一次執行時,或更新項目來修復可能會發生任何損害時,此更新可能會建立項目。在 Windows 2000 中的存取權 HKEY_CLASSES_ROOT 會限定為系統管理員和進階使用者。

解決方案

警告: 如果您未正確使用登錄編輯程式可能會導致嚴重的問題,甚至必須重新安裝作業系統。Microsoft 不保證您可以解決因不當使用 「 登錄編輯器 」 的問題。使用 「 登錄編輯程式 」,請自行負擔相關的風險。


若要解決這種錯誤,並允許伺服器來註冊執行特殊權限的使用者時,登錄權限時,測試您開啟一個機碼如下列程式碼所示:
HKEY hTestKey = NULL;
LONG lResult = ::RegCreateKeyEx(HKEY_CLASSES_ROOT, 
                          "MFCOServ.Document", 0, "", 
                          REG_OPTION_NON_VOLATILE, 
                          KEY_ALL_ACCESS, NULL, 
                          &hTestKey, NULL);
if ((ERROR_SUCCESS == lResult) && (hTestKey != NULL))
{
   // It's ok to call UpdateRegistry
}
				
注意 RegCreateKeyEx 到第二個參數是登錄中的文件型別。 這將會是您專案的特定。

狀況說明

Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的有錯誤。

其他相關資訊

Windows 2000,依預設是安全的 Windows 環境。在此環境中無權限的使用者可能會寫入下列三個特定位置:
  1. 被到他們自己部份登錄,指定為 HKEY_CURRENT_USER,具有下列兩個例外:
    Software\Policies
    					

    \Software\Microsoft\Windows\CurrentVersion\Policies
    					
  2. 到他們自己使用者設定檔目錄 (CSIDL_PROFILE)。
  3. 共享的文件位置 (CSIDL_COMMON_DOCUMENTS)。
必須由系統管理員和進階使用者安裝應用程式。一個 MFC OLE 伺服器,這先前已經註冊由特殊權限的使用者,會繼續順利執行之後解決該錯誤。

重製行為的步驟

  1. 使用 MFC AppWizard 產生 MFC 可執行的應用程式。
  2. 第 1 頁上的 MFC AppWizard,選取 [單一文件] 或 [multi-document 應用程式類型]。
  3. 在 MFC AppWizard 頁 3 上, 選取 [不論是完整的伺服器 」 或 「 容器和伺服"做為您想要包含的複合文件支援的型別。
  4. 接受上其餘的 MFC AppWizard 頁面預設值。
  5. 建置應用程式。
  6. 無權限的使用者的登入下, 執行應用程式,並顯示錯誤。如果應用程式已在電腦上已經註冊,然後解決此錯誤,程式會繼續執行。如果應用程式從未登錄在目標電腦上,則會傳回錯誤值。

?考

應用程式規格的 Microsoft Windows 2000 的桌面應用程式 (Specifications\Platforms)。
應用程式規格的 Microsoft Windows 2000 的分散式應用程式 (Specifications\Platforms)。
Microsoft Windows 2000 應用程式相容性 (技術 Articles\Windows Platform\Windows 2000)。
Microsoft Windows 2000 群組原則 (Backgrounders\Windows Platform\Windows 2000)

這篇文章中的資訊適用於:
  • Microsoft Foundation Class Library 4.2?應用於:
    • Microsoft Visual C++ 5.0 Standard Edition
    • Microsoft Visual C++ 6.0 Service Pack 5
關鍵字:?
kbmt kbtshoot kbbug kbdocview kboleapp kbpending KB254957 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:254957? (http://support.microsoft.com/kb/254957/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
Retired KB Article依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。