Toon posts:

[C#]Toolbar installer maken

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo. Ik heb een toolbar gemaakt met behulp van de BandObject library die op thecodeproject staat
http://www.codeproject.com/csharp/dotnetbandobjects.asp
Deze toolbar werkt lokaal helemaal goed, alleen ben ik nu bezig met een installer te maken. Als ik de toolbar lokaal installeer zeg ik:
gacutil /if mijndll.dll
regasm dll.dll
En op het moment dat de dll geregistreerd wordt als COM server, wordt er een methode aangeroepen die dingen toevoegt aan het register bij "SOFTWARE\Microsoft\Internet Explorer\Toolbar".

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/// <summary>
        /// Called when derived class is registered as a COM server.
        /// </summary>
        [ComRegisterFunctionAttribute]
        public static void Register(Type t)
        {
            string guid = t.GUID.ToString("B");
            
            RegistryKey rkClass = Registry.ClassesRoot.CreateSubKey(@"CLSID\"+guid );
            RegistryKey rkCat = rkClass.CreateSubKey("Implemented Categories");

            BandObjectAttribute[] boa = (BandObjectAttribute[])t.GetCustomAttributes(
                typeof(BandObjectAttribute),
                false );

            string name = t.Name;
            string help = t.Name;
            BandObjectStyle style = 0;
            if( boa.Length == 1 )
            {
                if( boa[0].Name != null )
                    name = boa[0].Name;

                if( boa[0].HelpText != null )
                    help = boa[0].HelpText;

                style = boa[0].Style;
            }

            rkClass.SetValue(null, name );
            rkClass.SetValue("MenuText", name );
            rkClass.SetValue("HelpText", help );

            if( 0 != (style & BandObjectStyle.Vertical) )
                rkCat.CreateSubKey("{00021493-0000-0000-C000-000000000046}");

            if( 0 != (style & BandObjectStyle.Horizontal) )
                rkCat.CreateSubKey("{00021494-0000-0000-C000-000000000046}");

            if( 0 != (style & BandObjectStyle.TaskbarToolBar) )
                rkCat.CreateSubKey("{00021492-0000-0000-C000-000000000046}");

            if( 0 != (style & BandObjectStyle.ExplorerToolbar) )
                Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Toolbar").SetValue(guid,name);

        }


Bij het maken van de installer heb ik al vanalles geprobeert, maar ik krijg het niet werkend. Eerst d8 ik, ik moet een batchfile maken die regasm enzo doet. Maar deze programma's staan alleen op pc's met de .net sdk. Toen heb ik de dll's bij de installer toegevoegd aan de "global assembly cache folder" en bij de properties heb ik Register - vsdraCOM aangezet.
Alleen wordt de methode met de flag ComRegisterFunctionAttribute niet aangeroepen.

  • Aram
  • Registratie: Februari 2004
  • Laatst online: 14-08-2025
Gebruik de /regfile [:regFile] optie van regasm.exe om een registry file te genereren. Deze kan je nu in je installer project gebruiken zonder dat je regasm nodig hebt op de target machine.

Verwijderd

Topicstarter
Hey. Bedankt voor de tip, alle waardes worden nu automatisch aan het register toegevoegd. Dus regasm is niet meer nodig. Maar als ik bij de visual studio installer de dll's in de global assembly cac he directory plaats en register aanzet, werkt dit niet. De dll's worden wel aan de map windows/assembly toegevoegd, maar er verschijnt geen extra toolbar keuze bij internet explorer. Wat wel zo is, als ik gacutil /if gebruik. Wat doe ik fout?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

Waarschijnlijk is dit een optie waar VS niet aan doet omdat het niet zoveel gebruikt wordt.
Je kunt wel (en dat is denk ik hoe MS het bedoeld heeft) in je setup project in de Registry view het gegenereerde bestandje neerploffen zodat het alsnog meegenomen wordt.

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
Ik heb het op een andere manier opgelost, misschien een beetje dirty. Ik heb een installer gemaakt met instal-us, daarmee heb ik alle dll's + regasm.exe en gacutil.exe + een batchfile die de dll's registreerd in een map gegooid. Dan voort de installer install.bat uit en klaar is kees, regasm mijndll.dll en gacutil mijndll.dll kunnen gewoon worden aangeroepen.