Babybaer Geschrieben 8. März 2004 Geschrieben 8. März 2004 Hallo Leutz, ich versuche in ein bestehendes MSI Paket und in einer bestehenden Table, einen neuen Eintrag einzufügen. Leider bekomme ich immer wieder den Fehler 1627 (ERROR_FUNCTION_FAILED 1627L // Function failed during execution.) bei der Methode MsiViewModify. Warum? Was habe ich vergessen oder was mach ich falsch? //----------------------------------------- HRESULT hr = CoInitializeEx( NULL, 0 ); UINT result; LPCTSTR szPackagePath = _T("D:\\Pakete\\Adobe Reader 6.0 Deutsch\\Adobe Reader 6.0 Deutsch neu\\Adobe Reader 6.0 - Deutsch.msi"); PMSIHANDLE hDatabase = 0; PMSIHANDLE hRecord = 0; PMSIHANDLE hView = 0; if (ERROR_SUCCESS == MsiOpenDatabase(szPackagePath, MSIDBOPEN_TRANSACT, &hDatabase)) { LPCSTR szSQL = _T("INSERT INTO `Registry` (`Registry`,`Root`,`Key`,`Name`,`Value`,`Component_`) VALUES (?,?,?,?,?,?)"); result = MsiDatabaseOpenView(hDatabase, szSQL,&hView); if(result == ERROR_BAD_QUERY_SYNTAX){AfxMessageBox(_T("****** SQL!!!"));} if(result == ERROR_INVALID_HANDLE){AfxMessageBox(_T("Zugriff auf Installer verweigert!!!"));} if(result == ERROR_SUCCESS) { hRecord = MsiCreateRecord(6); if(hRecord) { result = MsiRecordSetString(hRecord, 1, _T("Test1")); result = MsiRecordSetString(hRecord, 2, _T("Test2")); result = MsiRecordSetInteger(hRecord, 3, 3); result = MsiRecordSetString(hRecord, 4, _T("Test4")); result = MsiRecordSetString(hRecord, 5, _T("Test5")); result = MsiRecordSetString(hRecord, 6, _T("Test6")); if(!result) result = MsiViewModify(hView,MSIMODIFY_INSERT, hRecord); if(!result) result = MsiViewClose(hView); if(!result) result = MsiDatabaseCommit(hDatabase); } } } if (hRecord) result = MsiCloseHandle(hRecord); if (hDatabase) result = MsiCloseHandle(hDatabase); CoUninitialize(); //-----------------------------------------
Babybaer Geschrieben 9. März 2004 Autor Geschrieben 9. März 2004 Ok habs alles stimmt, habe einen kleinen Dreher in der Zeile LPCSTR szSQL = _T("INSERT INTO `Registry` (`Registry`,`Root`,`Key`,`Name`,`Value`,`Component _`) VALUES (?,?,?,?,?,?)"); ... //falsch result = MsiRecordSetString(hRecord, 1, _T("Test1")); result = MsiRecordSetString(hRecord, 2, _T("Test2")); result = MsiRecordSetInteger(hRecord, 3, 3); ... ... //richtig result = MsiRecordSetString(hRecord, 1, _T("Test1")); result = MsiRecordSetInteger(hRecord, 2, 3); result = MsiRecordSetString(hRecord, 3, _T("Test2")); ...
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden