Identifier le type d'un fichier exe

Signaler
Messages postés
30
Date d'inscription
mardi 28 février 2006
Statut
Membre
Dernière intervention
5 mars 2013
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,

J'ai un petit problème avec une application simple que je suis en train de faire en vb.net

Voici ce que j'essai de faire : une application qui permettra à l'utilisateur de choisir un fichier .exe (exécutable). Ensuite l'utilisateur clique sur un bouton "analyser" et l'application lui retourne si l'application est 16 bits, 32 bits ou 64 bits.

Je crois que j'ai pas mal le bon code pour y arriver mais quand j'appel la fonction GetBinaryType et que je lui passe le nom du fichier en paramètre, il me sort une exception

System.AccessViolationException: Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.

Je sollicites donc votre aide afin de résoudre le problème s.v.p.


'
Public Partial Class MainForm
Public Sub New()
' The Me.InitializeComponent call is required for Windows Forms designer support.
Me.InitializeComponent()

'
' TODO : Add constructor code after InitializeComponents
'
End Sub


Const SCS_32BIT_BINARY = 0
Const SCS_DOS_BINARY = 1
Const SCS_OS216_BINARY = 5
Const SCS_PIF_BINARY = 3
Const SCS_POSIX_BINARY = 4
Const SCS_WOW_BINARY = 2
Const SCS_64BIT_BINARY = 6


Private Declare Function GetBinaryType Lib "kernel32" Alias "GetBinaryTypeA" (ByVal lpApplicationName As String, lpBinaryType As Long) As Long

Public Sub AppliType()
Dim Ret As Long, sMsg As String

If GetBinaryType(textBox1.Text, Ret) <> 0 Then
sMsg = "The selected file is "

Select Case Ret
Case SCS_32BIT_BINARY
sMsg = sMsg + "a Win32-based application"
Case SCS_DOS_BINARY
sMsg = sMsg + "an MS-DOS \endash based application"
Case SCS_OS216_BINARY
sMsg = sMsg + "a 16-bit OS/2-based application"
Case SCS_PIF_BINARY
sMsg = sMsg + "a PIF file that executes an MS-DOS \endash based application"
Case SCS_POSIX_BINARY
sMsg = sMsg + "a POSIX \endash based application"
Case SCS_WOW_BINARY
sMsg = sMsg + "a 16-bit Windows-based application"
Case SCS_64BIT_BINARY
sMsg = sMsg + "a 64-bit Windows-based application"
End Select
Else
sMsg = "The selected file is not an executable!"
End If

textBox2.Text = sMsg
End Sub


Sub Button1Click(sender As Object, e As EventArgs)
openFileDialog1.ShowDialog()
textBox1.Text = openFileDialog1.FileName
End Sub

Sub Button2Click(sender As Object, e As EventArgs)
AppliType		
End Sub
End Class

4 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
Tu as selon toute apparence "récolté" sur le web un bout de code écrit en VB6 et t'es contenté de le copier. !
Il t'appartient de le transposer en VB.Net.
En VB.Net, pour ton information, les Long sont des Integer.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
30
Date d'inscription
mardi 28 février 2006
Statut
Membre
Dernière intervention
5 mars 2013

J'ai effectivement récolté ce code sur le web, puisque j'ai pour principe de ne pas réinventé la roue!

Cependant, ça ne règle pas mon problème. Est-ce que tu peux m'indiquer ce que je dois faire pour que ça marche ?

Bonsoir,

La déclaration de ta fonction GetBinaryType est étrange. Pour récupérer 'Ret' dans ton code (qui doit être un Integer), tu dois spécifier le mot clé ByRef.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour, bnana32,
A la place de iceman64b, je commencerais par m'intéresser de très près à ce source, déposé sur ce forum en 2008 :
Tapez le texte de l'url ici.
j'y découvrirais la bonne déclaration de cette fonction, certes, mais, en l'analysant (et le comprenant), je saurais l'utiliser pour la finalité définie.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ