Domanda

Ho bisogno di aggiornare un Attributi colonna in un file MSI. Purtroppo, non riesco a trovare alcuna documentazione (esp. Per C ++).

Ecco un frammento di codice di quello che sto cercando di fare:

DatabasePtr db = /* opening db succeeds*/
ViewPtr view = db->OpenView(_bstr_t("SELECT Attributes FROM Component"));
view->Execute(NULL);
RecordPtr record=view->Fetch();

record->PutIntegerData(2, record->GetIntegerData(1)|2048);

// I do not exactly understand the next 2 lines
// Should I really call Execute before Modify?
record->Execute(record);
record->Modify(msiViewModifyUpdate, record); //throws a _com_error

Come indicato sul record-> Modifica (...) gettare un _com_error affermando: errore IDispatch # 1000? Cosa significa. Dove posso cercare questi codici di errore? Questi non sono HRESULT ...

Ma le domande più importanti sono come faccio aggiornare il record correttamente? Come faccio a scorrere tutti i record selezionati? Facendo un nuovo prendere e confrontando il record con risultati NULL in un ciclo infinito.

Grazie per l'aiuto,
Ovanes

È stato utile?

Soluzione 2

Ok, trovato il problema: (

Ho aperto il database in modalità di sola lettura .

Questa è la snipped che funziona:

InstallerPtr installer(TEXT("WindowsInstaller.Installer"));
VARIANT open_flag;
VariantInit(&open_flag);
open_flag.vt = VT_I4;
open_flag.lVal = msiOpenDatabaseModeTransact;

DatabasePtr db = installer->OpenDatabase(msi_path, open_flag);
{
  ViewPtr view = db->OpenView(_bstr_t("SELECT Attributes FROM Component"));
  view->Execute(NULL);
  RecordPtr record=view->Fetch();

  if(!record) ... //error handling

  while(record)
  {
    record->PutIntegerData(1, record->GetIntegerData(1)|2048);

    record->Modify(msiViewModifyUpdate, record);
    record=view->Fetch();
  }
} //view->Close() is called implicitly
db->Commit();

La speranza che aiuta a qualcuno.

Ovanes

Altri suggerimenti

con C ++ per questo è un po 'eccessivo. Avere una lettura su DTF:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top