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

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

ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้: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 เป็น
ไดเรกทอรี

คำเตือน: บทความนี้ได้รับการแปลโดยอัตโนมัติ

คุณสมบัติ

รหัสบทความ: 247985 - การตรวจสอบครั้งสุดท้าย: 12/05/2015 17:48:37 - ฉบับแก้ไข: 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

  • kbnosurvey kbarchive kbhowto kbregistry kbmt KB247985 KbMtth
คำติชม