[VB.NET] Knoppen uitschakelen bij missende DLL

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 18-09 20:12

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Hey mensen,

Ik zit met een kleine uitdaging waar ik niet helemaal uit kom.

Voorinfo
We hebben hier een project beheer programma, dit is eigenlijk niet meer dan een database met een flinke lap gegevens.
Door de afdelingen heen, wordt hier informatie aan toegevoegd en specifieke delen van gebruikt.
Dit project programma heeft plugins waarmee we third party API's aanroepen.
Hiermee kunnen we de info uit de database in de third party apps laden.

Probleem
Elke afdeling heeft z'n eigen third party apps.
Dus iemand van afdeling A, heeft app A. Maar iemand van afdeling B heeft die app A niet.
Als iemand van afdeling B dan functies probeert uit te voeren, krijg ik een ""Could not load file or assembly" foutmelding.

Wat zou ik graag willen
Detecteren of bepaalde dll's aanwezig zijn op het systeem, en zo ja: een aantal functies uitschakelen.
Maar ik wil dit liever niet location based (File.Exists) omdat de third party apps geen vaste installatie plek kennen.
Het uitschakelen van de functies kan zo makkelijk als het disablen van een knop.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Zoiets?
From .NET, the reflection API - Assembly.Load(...) will throw a FileNotFoundException if it does not find the assembly. The API requires a fully qualified assembly name, so I assume it must be in the GAC. I am using it to test for the presence of SQL Server Compact Edition:

C#:
1
2
Assembly foo = Assembly.Load("System.Data.SqlServerCe, Version=3.5.1.0, " +
    "Culture=neutral, PublicKeyToken=89845dcd8080cc91");

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 18-09 20:12

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
Daar is het mee gelukt.
Alleen ben ik nooit zo gelukkig als ik een try-catch constructie gebruik voor een controle.
Is er ook een nettere oplossing? :P

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
    Private Function CheckIfDllExists() As Boolean
        Dim Test As Assembly

        Try
            Test = Assembly.Load("LostAndFound, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")
            Return True
        Catch ex As Exception
            Return False
        End Try

    End Function

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik zou hier sowieso een Assembly.TryLoad(assemblyString, byref result) (extension?)method van maken die een wrapper om je Assembly.Load(...) is, a-la int.TryParse. Verder is je catch veel te breed (je wil enkel de FileNotFoundException, FileLoadException en BadImageFormatException vangen). En in je voorbeeld, maar dat is mierenneukerij en alleen mijn persoonlijke voorkeur, ik zou de return false na de end try zetten voor de duidelijklheid.

[ Voor 14% gewijzigd door RobIII op 03-10-2012 10:48 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 18-09 20:12

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
RobIII schreef op woensdag 03 oktober 2012 @ 10:46:
[...]
Verder is je catch veel te breed (je wil enkel de FileNotFoundException, FileLoadException en BadImageFormatException vangen). En in je voorbeeld, maar dat is mierenneukerij en alleen mijn persoonlijke voorkeur, ik zou de return false na de end try zetten voor de duidelijklheid.
Aan de ene kant wel, maar aan wel. Maar aan de andere kant wil ik testen of ik de dll kan laden.
Dus elke vorm van exception die ik krijg bij een Assembly.Load zou ik willen afvangen toch?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Armageddon_2k schreef op woensdag 03 oktober 2012 @ 13:10:
Dus elke vorm van exception die ik krijg bij een Assembly.Load zou ik willen afvangen toch?
Dus als je een DivisionByZeroException (bij wijze van) krijgt wil je dat daar 'wegmoffelen' :? :X Het gaat er mij meer om dat je de ArgumentNullException en ArgumentException bijvoorbeeld gewoon wil doorgooien.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 16:33
Begrijp ik het nu goed dat je voor elke mogelijke third party app al wel knopjes in jou applicatie hebt zitten?

Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 18-09 20:12

Armageddon_2k

Trotse eigenaar: Yamaha R6

Topicstarter
RobIII schreef op woensdag 03 oktober 2012 @ 13:20:
[...]

Dus als je een DivisionByZeroException (bij wijze van) krijgt wil je dat daar 'wegmoffelen' :? :X Het gaat er mij meer om dat je de ArgumentNullException en ArgumentException bijvoorbeeld gewoon wil doorgooien.
True, alleen ik dacht meer: Aangezien dat stukje code niets meer of minder gaat doen dan de code die daar staat. Dan maakt het ook niet zo veel uit.
jip_86 schreef op woensdag 03 oktober 2012 @ 13:25:
Begrijp ik het nu goed dat je voor elke mogelijke third party app al wel knopjes in jou applicatie hebt zitten?
Ja, onze applicatie is 1 grote applicatie. En alle functies voor third party zitten er altijd in.
Pagina: 1