[ X-Cite @ 13.12.2006. 11:57 ] @
Koristim VS.NET 2003 i želim napraviti setup.exe koji će automatski uz instalaciju i registrovati moj assembly (DLL za .NET program).

Kako uraditi da to sam odradi kako treba?

Znam za ručnu variantu preko GACUTIL-a ali to mi ne dolazi u obzir.

Hvala!
[ bunker @ 14.12.2006. 07:58 ] @
Pa moras to "rucno" da uradis
Pogledaj malo Installer klase. Nasledjeni tipovi ovih klasa overajduju metode OnInstall, OnUniunstall, OnCommit i OnRollback. Samo bi trebalo da u metodi OnComit pozoves spoljasnji proces koji cce da izvrsi komandu za registraciju dll-a.

Ovo cces morati sam da istrazujes, ali u svoj projekat dodat Installer komponentu, a u setup project dodaj custom actions sa primary output iz projekta koji sadrzi Installer klasu.

Nadam se da je dovoljno jasno, tek sam dosao na posao, pa jos uvek ne funkcionisem najbolje. Ako treba neka dodatna pomocc javi se na mail

Pozdrav
[ bunker @ 14.12.2006. 12:04 ] @
Neccu na mail da ti odgovaram. Ovo moze jos nekome zatrebati.

U svom deploy projektu, klikni desnim dugmetom na root. Izaberi View/File Sistem.
Otvorice ti se novi prozor koji ima tree i naslof tree root-a je File System On Target Machine.
Klikni desnim dugmetom na ovo, izaberi "Add Special Folder", a zatim izaberi "Global Assembly Cache" iz menija.
U folder koji je nastao iskopiraj dll koji hocces da stoji u GAC-u.
Prilikom instalacije installer cce iskopirati taj dll u GAC i to je to. Ja mislim da nema potrebe za nekim dodatnim zajebancijama kao sto je regsvr32 za registrovanje COM-ova.

Kad sam ti prvi put odgovarao, malo zam zabagovao, spavalo mi se, ali za OnCommit, dao sam ti predlog da u ovoj metodi pozoves neki spoljasnji System.Runtime.Process koji cce se izvrsiti. U tvom slucaju gacutil (ali si ti primetio da se on ne distribuira - ja sad znam i hvala ti).
Ja kad treba COM-ove da registrujem nakon instalacije, ili pokrenem servise "NET START" to uradim u OnCommit. Ako bas hocces deo koda poslaccu ti, ali mozes i sam da iscackas malo, bicce bolje tako.

Jos samo mi javi da li sam bio u pravu za onaj GAC folder, da li je bilo dovoljno samo iskopirati dll tamo. Ovo mi odgovori na forumu, ne moras na mail.

Pozdrav
[ X-Cite @ 14.12.2006. 13:12 ] @
Ovo je zaista ispravno i nemože biti lakše rešenje za registraciju assembly-a!

Puno ti hvala na ovome... nisam baš advanced user u VB.NET-u pa nisam ni upoznat sa svim mogućnostima

Sad sam saznao i to, da ću trebati i registrovati neke COM (DLL-ove) za korišćenje sa VB6 projektima a buildovati ih u VS.NET-u.

Predpostavljam, da se radi o tome što si napisao za OnCommit() pa bi te zamolio ako možeš da kopiraš taj dio koda.

Čaprkao bi ja to i sam ali imam dosta posla za završavati, vremena uvjek premalo, a znanja u VS.NET-u još manje pa to ide sve presporo

Ako nije problem to bi mi još trebalo...

HVALA NA KVADRAT
[ bunker @ 14.12.2006. 13:56 ] @
Danas sam bas zainteresovan za ovaj vid komunikacije.
Ali daccu ti primer u c#, ja to koristim. Nadam se da necce iti problem. Sledecci primer startuje Windows service nakon instalacije
Code:

public override void Commit(System.Collections.IDictionary savedState)
        {
            try
            {
                if (Context.Parameters["LAUNCH"] == "1")
                {
                    this.StartService("Dsm.LT Service");
                }
                base.Commit(savedState);
            }
            catch
            {
                throw;
            }
        }

    private void StartService(string p_ServiceName)
        {
            try
            {
                System.Diagnostics.ProcessStartInfo oParam = new System.Diagnostics.ProcessStartInfo();
                oParam.FileName = "NET";
                oParam.Arguments = string.Format("START \"{0}\"", p_ServiceName);
                oParam.UseShellExecute = false;
                oParam.RedirectStandardOutput = true;
                oParam.CreateNoWindow = true;

                System.Diagnostics.Process oProcess = new System.Diagnostics.Process();
                oProcess.StartInfo = oParam;
                oProcess.Start();

                System.Threading.Thread.Sleep(500);
            }
            catch
            {
                //throw;
            }
        }


moracces samo linije
Code:

oParam.FileName = "NET";
oParam.Arguments = string.Format("START \"{0}\"", p_ServiceName);

da zamenis nekom komandom koja tebi treba. Konmanda NET.exe START ImeServisa startuje Windows service sa imenom koji mu prosledis. Tebi cce FileName biti regsvr32, a argument ime COM-a.
evo ti jedan dobar clanak koji cce ti pojasniti Context.Parameters kolekciju, kao i mnoge druge stvari o Deploy projektima:
http://www.codeproject.com/dotnet/CustomizingInstallers.asp