Installation eines Zertifikat
-
Hmmmmmmm ShellExecute (FAQ)?
-junix
-
Was willst Du mir damit sagen ?!?!??!
-
Du sollst die FAQ und die Hilfe nach ShellExecute durchsuchen?
-junix
-
Habe ich gemacht, allerdings ist dort nicht das vorhanden was ich suche: Mit Hilfe von "ShellExecute" kann ich zwar das Zertifikat installieren, allerdings werden bei der Installation verschiedene Dialogboxen angezeigt und genau dies soll durch "meine" neue Applikation automatisiert werden, d.h. es sollen keine Eingaben mehr vom Benutzer von nöten sein.
Gruß
-
Wenn sich das bereits funktionierende Installationsprogramm nicht z.B. per (Kommandozeilen-) Parameter steuern lässt so daß keine Dialoge meht angezeigt werden müßtest Du in Erfahrung bringen, wie das Zertifikat installiert wird und das dann genau nachbilden. Anosnten sehe ich keinen anderen Weg.
-
Genau das WIE ist hier die Frage
-
Naja die Antwort darauf suchst du besser im Rund um forum.
Alternativ könntst du auch mittels send_key (heissts glaub ich?) den Dialog fernsteuern (->Suchfunktion)
-junix
-
Mit "wie" meinte ich, Du solltest schon wissen bzw. in Erfahrung bringen was mit dem Key-File passieren muss, wo soll es hingeschrieben werden, müssen noch irgendwo Einträge gemacht werden usw. Du kannst nicht erwarten, daß die VCL allmächtig ist und einfach so "auf Zuruf" irgendwas installieren kann. Nicht umsonst braucht es ein Programm (selbjenes welches Dir Dialoge wirft), um das Zertie zu installieren.
-
Bin nun etwas weiter:
Ich habe den Tip (leider nicht aus diesem Forum)b ekommen, dass mitCAPICOM - (einen COM Client für das CryptoAPI)
eine Lösung meines Problems möglich sein müsste.
-
Was heisst hier "leider nicht aus diesem Forum"? Es ist doch inzwischen offensichtlich, dass es sich dabei nicht um ein BCB-spezifisches Problem sondern um eine WinAPI-Frage handelt.
Da der Thread hier schon so "zugemüllt" ist lohnt sich das Verschieben nicht mehr. Deshalb bitte ich dich, die Frage im WinAPI-Forum neu zu stellen, gleich mit Verweis auf den MSDN-Artikel.
-
Hier die Lösung (für die, die es noch interessiert)
Gruss Michael
#include <vcl.h> #pragma hdrstop #include "Unit1.h" #include <fstream.h> #include <wincrypt.h> using namespace std; //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { string data(16834, '\0'); if (DWORD len = ifstream("D:\\test.cer", ios_base::binary).read(data.begin(), data.size()).gcount()) { HCERTSTORE store; if (store = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_SYSTEM_STORE_LOCAL_MACHINE, L"Root")) { PCCERT_CONTEXT context = CertCreateCertificateContext( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, (BYTE*)data.begin(), data.size()); if (context) { if (CertAddCertificateContextToStore(store, context, CERT_STORE_ADD_ALWAYS, NULL)) cout << "Success." << endl; else cout << "Failed to add certificate to store" << endl; CertCloseStore(store, CERT_CLOSE_STORE_FORCE_FLAG); } } } }