Hallo Herr Kaprust,
ich muss in ein Setup eine Custom Action einbauen, die Managed Code aufrufen muss.
Grundsätzlich habe ich mehrere Möglichkeiten ausprobiert, die aber immer irgendwie "problematisch" waren:
1. Ich habe eine C++ DLL und eine C++/Managed DLL. Die reine C++ DLL lädt die zweite dynamisch und ruft über eine C-Api der betreffenden Managed-Code auf.
Problem hierbei ist: Wie kann ich den Installer dazu bewegen, dass beide DLLs aus den Resourcen entpackt werden ? (Zweitere sogar mit einem definierten Namen)
2. (Die von mir bevorzugte Lösung) Ich habe eine einzelne Managed DLL (C#) und der Installer muss hierin eine Custom Action aufrufen. Ich habe gelesen, dass es mit dem Visual Studio Installer und auch Wix geht. Aber was muss ich im Falle des AkInstallers machen ?
3. Ich habe eine einzelne C++/Managed DLL. Hier habe ich aber das Problem, dass diese DLL Verweise auf MFC-DLLs haben muss, die ggfs. noch nicht installiert sind. Die Voraussetzung, dass das Framework 2.0 installiert sein muss (wie bei 2.) ist da deutlich "angenehmer".
Haben Sie eine Idee oder einen guten Hinweis ?
Viele Grüße
Werner Slabon
Managed Custom Action
-
- Administrator
- Beiträge: 1092
- Registriert: 29.02.2004, 15:51
- Wohnort: Hamburg
- Kontaktdaten:
Re: Managed Custom Action
Guten Tag!
1: Entpacken Sie die Daten selbst z. B. so:
2: Der AKInstallerMSI bietet diese Möglichkeit zur Zeit noch nicht.
1: Entpacken Sie die Daten selbst z. B. so:
Code: Alles auswählen
BYTE *GetMSIStream(MSIHANDLE m_msidb, LPCTSTR m_Select, int column, DWORD &m_Len)
{
PMSIHANDLE hView;
BYTE *bufBinary = NULL;
if(MsiDatabaseOpenView(m_msidb, m_Select, &hView) != ERROR_SUCCESS)
return NULL;
if(MsiViewExecute(hView, NULL) != ERROR_SUCCESS)
return NULL;
UINT res;
PMSIHANDLE hRecRow;
while ((res = MsiViewFetch(hView, &hRecRow)) != ERROR_NO_MORE_ITEMS)
{
DWORD cbSize = MsiRecordDataSize(hRecRow, column);
m_Len = cbSize;
bufBinary = new BYTE[cbSize+5];
ZeroMemory(bufBinary,cbSize+3);
if(MsiRecordReadStream(hRecRow, column, (char*)bufBinary, &cbSize) != ERROR_SUCCESS)
return NULL;
}
return bufBinary;
}
...
bufBinary = GetMSIStream(MsiGetActiveDatabase(hInstall), _T("SELECT Data FROM Binary WHERE Name='MEINE_DLL'"), 1, dwDatenSize);
...
Mit freundlichen Grüßen,
AKApplications, Andreas Kapust
AKApplications, Andreas Kapust
Re: Managed Custom Action
Hallo Herr Kapust
Das wäre wirklich hilfreich!
Viele Grüße
Sörnt Poppe
2. (Die von mir bevorzugte Lösung) Ich habe eine einzelne Managed DLL (C#) und der Installer muss hierin eine Custom Action aufrufen. Ich habe gelesen, dass es mit dem Visual Studio Installer und auch Wix geht. Aber was muss ich im Falle des AkInstallers machen ?
Könnte Sie diese Funktionalität noch einbauen? Als nicht C/C++ Entwickler komme ich mit C# doch deutlich besser zurecht2: Der AKInstallerMSI bietet diese Möglichkeit zur Zeit noch nicht.

Viele Grüße
Sörnt Poppe
-
- Administrator
- Beiträge: 1092
- Registriert: 29.02.2004, 15:51
- Wohnort: Hamburg
- Kontaktdaten:
Re: Managed Custom Action
Guten Tag!
Ist geplant, ET steht aber nicht fest.
Ist geplant, ET steht aber nicht fest.
Mit freundlichen Grüßen,
AKApplications, Andreas Kapust
AKApplications, Andreas Kapust
Re: Managed Custom Action
Das hört sich gut an.
Vielen Dank
Sörnt Poppe
Vielen Dank
Sörnt Poppe