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".
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.
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.