Avatar billede testpilot_dk Nybegynder
23. maj 2006 - 10:45 Der er 9 kommentarer og
1 løsning

setup projekt + tilføje com objekt til registreringsdatabasen

Hej!

Jeg er ved at lave et setup modul som skal tilføje et com objekt til registreringsdatabasen!

i kør skriver jeg: regsvr32 "C:\Placering\Write.dll"

Hvordan efterligner jeg denne metode
Avatar billede spif2001 Nybegynder
23. maj 2006 - 11:02 #1
Jeg har selv lavet noget lignende, hvor jeg brugte RegSvcs.

Du skal lave en Custom Action i dit Setup Projekt.

1. Tilføj en  Installer Class til dit projekt der laver dll'en.

2. I konstruktøren tilføjer du en event handler til AfterInstall - ex.:

  this.AfterInstall += new InstallEventHandler(CustomInstaller_AfterInstall);

3. Så implementerer du metoden, så du får startet en Process - ex.:

  string theAssemblyPath = this.Context.Parameters["assemblypath"];//Den folder du valgte at installere i
  ProcessStartInfo psi = new ProcessStartInfo("STI TIL REGSVC32", theAssemblyPath);
  psi.WindowStyle = ProcessWindowStyle.Hidden;//Så ser du ikke en kommandoprompt under eksekvering
  Process proc = Process.Start(psi);

4. Gå til Setup projektets Custom Action vindue og tilføj dit project output til Install folderen.

Nu vil den Process blive fyret af til sidst i din installation.
Avatar billede nico26 Nybegynder
23. maj 2006 - 11:04 #2
det som RegSvr32 gør, er at loade dll'en og kalde DLLRegisterServer. Så du skal bare gøre det samme. Koder ikke selv C#, men i Delphi ser det nogenlunde sådan ud

  if ModuleExists('C:\Placering\Write.dll') then
  begin
    hmod := LoadLibrary('C:\Placering\Write.dll');
    try
      @proc := GetProcAddress(hmod, 'DLLRegisterServer');
      Result := proc;
    finally
      FreeLibrary(hmod);
    end;
  end;
Avatar billede spif2001 Nybegynder
23. maj 2006 - 11:05 #3
Lidt uoverskueligt måske, men også lidt bøvlet at forklare...

Er faktisk ved at skrive en længere artikel om Setup Projekter, men er ikke færdig med den endnu ;)
Avatar billede testpilot_dk Nybegynder
23. maj 2006 - 11:09 #4
takker, hvordan undgår jeg så at den kommer og siger at det lykkedes til brugeren!

Når den har gjort sit job!
Avatar billede spif2001 Nybegynder
23. maj 2006 - 11:11 #5
hmmm.... kender ikke regsvr32, men enten skal den vel have en parameter a la:

ProcessStartInfo psi = new ProcessStartInfo("STI TIL REGSVC32", @"/hideparam " theAssemblyPath);

Eller også klarer linien her det for dig:
psi.WindowStyle = ProcessWindowStyle.Hidden;
Avatar billede nico26 Nybegynder
23. maj 2006 - 11:11 #6
regsvr32 /s
Avatar billede spif2001 Nybegynder
23. maj 2006 - 11:12 #7
hov - manglede et + i ex:
ProcessStartInfo psi = new ProcessStartInfo("STI TIL REGSVC32", @"/hideparam " +  theAssemblyPath);
Avatar billede spif2001 Nybegynder
23. maj 2006 - 11:13 #8
med nicos hjælp:
ProcessStartInfo psi = new ProcessStartInfo("STI TIL REGSVC32", @"/s " +  theAssemblyPath);
Avatar billede spif2001 Nybegynder
23. maj 2006 - 11:21 #9
For at sikre dig mod Windows biblioteker, er her en sti til regsvr32, der virker til alle Windows folder navne:

string path = Environment.GetEnvironmentVariable("windir")+"\\system32\\regsvr32.exe";
ProcessStartInfo psi = new ProcessStartInfo(path, @"/s " +  theAssemblyPath);
Avatar billede testpilot_dk Nybegynder
23. maj 2006 - 11:30 #10
takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester