วิธีการค้นหาเส้นทางและรุ่นของโปรแกรมประยุกต์ Office ที่จาก c ++ Visual

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 247985 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายว่า คุณสามารถตรวจสอบรีจิสทรีในขณะที่ดำเนินการกำหนดเส้นทางการติดตั้งและรุ่นของโปรแกรมประยุกต์ของ Office

ข้อมูลเพิ่มเติม

แต่ละโปรแกรมประยุกต์ของ Office เกี่ยวข้องกับรุ่น ProgID อิสระและ CLSID ตัว คุณสามารถตรวจสอบรีจิสทรีสำหรับคีย์ที่ประกอบด้วยเป็นเซิร์ฟเวอร์ CLSID และ ProgID เพื่อตรวจสอบทั้งเส้นทางการติดตั้งและรุ่นของเซิร์ฟเวอร์แอพลิเคชัน

  • เส้นทางไปยังโปรแกรมประยุกต์ของเซิร์ฟเวอร์สามารถพบได้ที่:
      HKEY_CLASSES_ROOT\CLSID\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx}\LocalServer32
    						
    โดย:{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx }แทน CLSID ของเซิร์ฟเวอร์

  • likewise รุ่น ProgID ที่ขึ้นกับรุ่นที่ลงทะเบียนไว้สำหรับเซิร์ฟเวอร์แอพลิเคชันจะอยู่ที่:
    HKEY_CLASSES_ROOT\sss.sss\CurVer
    						
    โดย:sss.sssแทนรุ่น ProgID ที่เกี่ยวข้องกับของเซิร์ฟเวอร์

ขั้นตอนในการสร้างตัวอย่าง

  1. สร้างข้อEXE Appwizard mfcการตั้งชื่อOfficePath. ในขั้นตอนที่ 1 ของ AppWizard เลือกกล่องโต้ตอบที่ใช้คลิกเสร็จสิ้น.
  2. คลิกการทรัพยากรแท็บ และเปิดการidd_officepath_dialogกล่องโต้ตอบ
  3. เอาออกแบบตกลงและปุ่มการยกเลิกในกล่องโต้ตอบ
  4. เพิ่มการEditBoxการโต้ตอบกล่อง และชื่อดังกล่าวidc_progid.
  5. เพิ่มสองCommandButtonsไปยังกล่องโต้ตอบ ชื่อ CommandButtonsidpathและidversionการตั้งค่าคำอธิบายเฉพาะให้GetPathและGetVersionตามลำดับ
  6. เริ่มการทำงานClassWizard.
  7. เพิ่มตัวจัดการฟังก์ชันไปbn_clickedข้อความของแต่ละ CommandButton
  8. สร้างตัวแปรสมาชิกสำหรับการEditBoxidc_progid ชื่อตัวแปรของสมาชิกm_ProgIDและมีระบุตัวควบคุมสำหรับประเภท และCEditสำหรับชนิดตัวแปร
  9. ปิดการ ClassWizard
  10. ในแฟ้ม OfficePathDlg.h เพิ่มฟังก์ชันสาธารณะสมาชิกต่อไปนี้เป็นคลาส COfficePathDlg:
      static BOOL GetPath(LPOLESTR szApp, LPSTR szPath, ULONG cSize);
      static BOOL GetVersion(LPCTSTR szApp, LPSTR szVersion, ULONG cSize);
  11. เพิ่มข้อกำหนดต่อไปนี้ของฟังก์ชัน OfficePathDlg.cpp:
    void COfficePathDlg::OnPath() 
    {	
        LPOLESTR szwApp;
        char szLocation[255], szApp[50];
        
        // Get ProgID from EditBox
        m_ProgID.GetWindowText(szApp, 50);
        if (strcmp(szApp,"") == 0)
        {
    	MessageBox("Type ProgID in EditBox", "Error");
    	return;
        }
        // Find number ofcharacters to be allocated
        int len = strlen(szApp) + 1;
    
        // Use OLE Allocator to allocate memory
        szwApp = (LPOLESTR) CoTaskMemAlloc(len*2);
        if (szwApp == NULL)
        {
    	MessageBox("Out of Memory", "Error");
    	return;
        }
    
        //	AnsiToUnicode conversion
        if (0 == MultiByteToWideChar(CP_ACP, 0, szApp, len,
                 szwApp, len))
        {
           // Free Memory allocated to szwApp if conversion failed
           CoTaskMemFree(szwApp);
           szwApp = NULL;
           MessageBox("Error in Conversion", "Error");
           return;
        }
    
        // Get Path to Application and display it
        if (!GetPath(szwApp, szLocation, 255))
    	MessageBox("Error Getting Path", "Error");
        else
    	MessageBox(szLocation, "Path");	
    }
    
    void COfficePathDlg::OnVersion() 
    {
        CHAR szVersion[255], szApp[50];	
        // Get Version of Application
        m_ProgID.GetWindowText(szApp, 50);
        
        if (strcmp(szApp,"") == 0)
        {
    	MessageBox("Type ProgID in EditBox", "Error");
    	return;
        }
    	
        // Get Version and display it
        if (!GetVersion(szApp, szVersion, 255)) 
      	MessageBox("Error Getting Version", "Error");
    
        else
    	MessageBox(szVersion, "Version");
    }
    
    BOOL COfficePathDlg::GetPath(LPOLESTR szApp, LPSTR szPath, ULONG cSize)
    {
        CLSID clsid;
        LPOLESTR pwszClsid;
        CHAR  szKey[128];
        CHAR  szCLSID[60];
        HKEY hKey;
    
        // szPath must be at least 255 char in size
        if (cSize < 255)
    	return FALSE;
    	
        // Get the CLSID using ProgID
        HRESULT hr = CLSIDFromProgID(szApp, &clsid);
        if (FAILED(hr))
        {
    	AfxMessageBox("Could not get CLSID from ProgID, Make sure ProgID is correct", MB_OK, 0);
            return FALSE;
        }
    
        // Convert CLSID to String
        hr = StringFromCLSID(clsid, &pwszClsid);
        if (FAILED(hr))
        {
    	AfxMessageBox("Could not convert CLSID to String", MB_OK, 0);
            return FALSE;
        }
    
        // Convert result to ANSI
        WideCharToMultiByte(CP_ACP, 0, pwszClsid, -1, szCLSID, 60, NULL, NULL);
    
        // Free memory used by StringFromCLSID
        CoTaskMemFree(pwszClsid);
    
        // Format Registry Key string
        wsprintf(szKey, "CLSID\\%s\\LocalServer32", szCLSID);
    
        // Open key to find path of application
        LONG lRet = RegOpenKeyEx(HKEY_CLASSES_ROOT, szKey, 0, KEY_ALL_ACCESS, &hKey);
        if (lRet != ERROR_SUCCESS) 
        {
    	// If LocalServer32 does not work, try with LocalServer
            wsprintf(szKey, "CLSID\\%s\\LocalServer", szCLSID);
            lRet = RegOpenKeyEx(HKEY_CLASSES_ROOT, szKey, 0, KEY_ALL_ACCESS, &hKey);
    	if (lRet != ERROR_SUCCESS) 
            {
                AfxMessageBox("No LocalServer Key found!!", MB_OK, 0);
                return FALSE;
            }
        }
    
        // Query value of key to get Path and close the key
        lRet = RegQueryValueEx(hKey, NULL, NULL, NULL, (BYTE*)szPath, &cSize);
        RegCloseKey(hKey);
        if (lRet != ERROR_SUCCESS)
        {
    	AfxMessageBox("Error trying to query for path", MB_OK, 0);
            return FALSE;
        }
    
        // Strip off the '/Automation' switch from the path
        char *x = strrchr(szPath, '/');
        if(0!= x) // If no /Automation switch on the path
        {
        int result = x - szPath; 
        szPath[result]  = '\0';  // If switch there, strip it
        }   
        return TRUE;
    }
    
    BOOL COfficePathDlg::GetVersion(LPCTSTR szApp, LPSTR szVersion, ULONG cSize)
    {
        CHAR  szKey[128], szValueName[128];
        HKEY hKey, hKey1;  
        
        wsprintf(szKey, "%s", szApp);
        LONG lRet = RegOpenKeyEx(HKEY_CLASSES_ROOT, szKey, 0, KEY_ALL_ACCESS, &hKey);
        if (lRet != ERROR_SUCCESS) {
    	// Word is registered, but no local server can be found!!!
    	AfxMessageBox("Could not get CLSID from ProgID, Make sure ProgID is correct", MB_OK, 0);
            return FALSE;
    	}
    
        wsprintf(szValueName, "%s", "CurVer");
        lRet = RegOpenKeyEx(hKey, szValueName, 0, KEY_ALL_ACCESS, &hKey1);
        if (lRet != ERROR_SUCCESS) {
    	// Excel is registered, but no local server can be found!!!
            return FALSE;
    	}
    
        // Get the Version information
        lRet = RegQueryValueEx(hKey1, NULL, NULL, NULL, (BYTE*)szVersion, &cSize);
    
        // Close the registry keys
    
        RegCloseKey(hKey1);
        RegCloseKey(hKey);
    
        // Error while querying for value
        if (lRet != ERROR_SUCCESS)
           return FALSE;
    
        // At this point szVersion contains the ProgID followed by a number. 
        // For example, Word 97 will return Word.Application.8 and Word 2000 will return Word.Application.9
    
    	
        // Store the version number
        char *x = strrchr(szVersion, '.');
        szVersion[0] = *(x + 1);
        szVersion[1] = '\0';
    	
        if (strcmp(szVersion, "6") == 0)
    	strcpy(szVersion, "Version 95");
    	else if (strcmp(szVersion, "8") == 0)
    		strcpy(szVersion, "Version 97");
    		else if  (strcmp(szVersion, "9") == 0)
    			strcpy(szVersion, "Version 2000");
    			else if (strcmp(szVersion,”1”) == 0)
    			strcpy(szVersion, “Version 2002”);
    
    			else
    			strcpy(szVersion, "Version unknown");
        return TRUE;
    
    }
  12. สร้างโครงการใช้งาน
เมื่อคุณเรียกใช้โปรแกรมประยุกต์ พิมพ์ ProgID สำหรับโปรแกรมประยุกต์ Office ในกล่องแก้ไข หมายเหตุ: ตัวอย่างของ ProgID อยู่Word.Application. คลิกการGetPathปุ่มการเรียกข้อมูลเส้นทาง และคลิกการGetVersionปุ่มเรียกรุ่นที่มีการลงทะเบียน

หมายเหตุเพิ่มเติม

ถ้าคุณมีหลายรุ่นของโปรแกรมประยุกต์ Office ที่ติดตั้งอยู่บนระบบของคุณ หมายเลขรุ่นสอดคล้องกับโปรแกรมประยุกต์ที่มีการลงทะเบียน ในกรณีส่วนใหญ่ รุ่นที่มีการลงทะเบียนเป็นรุ่นล่าสุดที่คุณรัน

ถ้าโปรแกรมประยุกต์ของเซิร์ฟเวอร์ไม่ได้ติดตั้ง โทรศัพท์เพื่อเปิดคีย์ของรีจิสทรีที่เชื่อมโยงล้มเหลว คุณสามารถใช้ข้อผิดพลาดในการจัดการในสถานการณ์นี้เพื่อดูว่า มีการติดตั้งโปรแกรมประยุกต์ของเซิร์ฟเวอร์

ข้อมูลอ้างอิง

240794วิธีการกำหนดเส้นทางการสำหรับโปรแกรมประยุกต์ Office ที่
234788วิธีการค้นหาเส้นทางการติดตั้งของแอพลิเคชัน 2000 Office เป็น

คุณสมบัติ

หมายเลขบทความ (Article ID): 247985 - รีวิวครั้งสุดท้าย: 16 ตุลาคม 2553 - Revision: 2.0
ใช้กับ
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Access 97 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Outlook 97 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Word 97 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Outlook 2000 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Access 2002 Standard Edition
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Outlook 2002 Standard Edition
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft Word 2002 Standard Edition
Keywords: 
kbhowto kbregistry kbmt KB247985 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:247985

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com