[.NET]Controle of reference bestaat

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MrDry
  • Registratie: December 2001
  • Laatst online: 26-09 16:56

MrDry

Desperados!

Topicstarter
Bestaat er binnen .NET een controle of een reference op een PC geïnstalleerd is?

Mijn probleem:
Ik het voor AutoCAD een aantal DLL bestanden gemaakt waarin routines zitten die wij intern gebruiken. Deze routines zijn geschreven in VB2008.
Aangezien de installatie van deze routines niet meer is dan het kopiëren van deze bestanden naar een map en een registry wijziging gebruik ik geen installer die benodigde dll's mee kopieert.

Uiteraard is er met een dependency walker uit te zoeken welke DLL ontbreekt, maar ik wil eigenlijk dat mijn routine aangeeft dat er een dll ontbreekt ipv crashed...

Iemand?

Quod licet lovi, non licet bovi


Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Kun je er niet gewoon een try, catch blok omheen gooien?

Acties:
  • 0 Henk 'm!

  • MrDry
  • Registratie: December 2001
  • Laatst online: 26-09 16:56

MrDry

Desperados!

Topicstarter
Zo'n oplossing heb ik nu.

De ontwikkel interface weet dat hij een DLL niet kan vinden...dat moet ik tijdens runtime toch ook boven water kunnen halen?

Quod licet lovi, non licet bovi


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Een stukje code toevoegen die door middel van File.Exists() kijkt of de betreffende DLL bestaat is niet goed genoeg?

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • FireDrunk
  • Registratie: November 2002
  • Laatst online: 25-09 07:39
Wat versta jij onder 'geinstalleerd'? Bedoel je aanwezig of geladen in het Global Cache? Want dat is nogal een verschil.

Even niets...


Acties:
  • 0 Henk 'm!

  • farmertjes
  • Registratie: Maart 2010
  • Laatst online: 02-06 20:29
En waarom maak je geen installer als daarmee alle problemen opgelost zijn?

[ Voor 38% gewijzigd door farmertjes op 06-09-2011 13:49 ]

flickr


Acties:
  • 0 Henk 'm!

  • L-VIS
  • Registratie: April 2005
  • Laatst online: 26-09 11:35
farmertjes schreef op dinsdag 06 september 2011 @ 13:47:
En waarom maak je geen installer als daarmee alle problemen opgelost zijn?
Dat maakt niet echt veel uit want je kunt een DLL altijd weg kieperen. Ik zou ook gewoon voor file.exists gaan.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
L-VIS schreef op dinsdag 06 september 2011 @ 14:19:
[...]

Dat maakt niet echt veel uit want je kunt een DLL altijd weg kieperen. Ik zou ook gewoon voor file.exists gaan.
Ik zou eerder via een van de Assembly.Load varianten kijken, want een assembly hoeft niet perse op een bepaalde locatie te zijn. Dat is afhankelijk van de configuratie. ( Mits het natuurlijk over een .NET assembly gaat, en niet over een ander type DLL )

[ Voor 9% gewijzigd door Woy op 06-09-2011 14:22 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • GateKeaper
  • Registratie: April 2004
  • Laatst online: 05-08 21:46

GateKeaper

#1 Procastinator

Een event inhaken op AppDomain.AssemblyResolve ? Indien de assembly niet gevonden wordt, dan de dll van het netwerk aftrekken.

info: MSDN: AppDomain.AssemblyResolve Event (System)

*edit, c# voorbeeldje. Zelf even omzetten naar vb en aanpassen naar wens.
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
        private void Form1_Load(object sender, EventArgs e)
        {
            //The AssemblyResolve event is called when the common language runtime tries to bind to the assembly and fails.
            AppDomain currentDomain = AppDomain.CurrentDomain;
            currentDomain.AssemblyResolve += new ResolveEventHandler(currentDomain_AssemblyResolve);
        }
    
        Assembly currentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            //This handler is called only when the common language runtime tries to bind to the assembly and fails.
    
            //Retrieve the list of referenced assemblies in an array of AssemblyName.
            Assembly MyAssembly, objExecutingAssemblies;
            string strTempAssmbPath = "";
    
            objExecutingAssemblies = Assembly.GetExecutingAssembly();
            AssemblyName[] arrReferencedAssmbNames = objExecutingAssemblies.GetReferencedAssemblies();
    
            //Loop through the array of referenced assembly names.
            foreach (AssemblyName strAssmbName in arrReferencedAssmbNames)
            {
                //Check for the assembly names that have raised the "AssemblyResolve" event.
                if (strAssmbName.FullName.Substring(0, strAssmbName.FullName.IndexOf(",")) == args.Name.Substring(0, args.Name.IndexOf(",")))
                {
                    //Build the path of the assembly from where it has to be loaded.
                    //The following line is probably the only line of code in this method you may need to modify:
                    <strong>strTempAssmbPath = txtAssemblyDir.Text;</strong>
                    if (strTempAssmbPath.EndsWith("\\")) strTempAssmbPath += "\\";
                    strTempAssmbPath += args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll";
                    break;
                }
    
            }
            //Load the assembly from the specified path.
            MyAssembly = Assembly.LoadFrom(strTempAssmbPath);
    
            //Return the loaded assembly.
            return MyAssembly;
        }

http://www.chilkatsoft.com/p/p_502.asp

[ Voor 88% gewijzigd door GateKeaper op 06-09-2011 14:33 ]


Acties:
  • 0 Henk 'm!

  • MrDry
  • Registratie: December 2001
  • Laatst online: 26-09 16:56

MrDry

Desperados!

Topicstarter
Dat ziet er goed uit. Ga ik ff proberen

Quod licet lovi, non licet bovi

Pagina: 1