Identifier le type d'un fichier exe

cs_iceman64b Messages postés 30 Date d'inscription mardi 28 février 2006 Statut Membre Dernière intervention 5 mars 2013 - 16 oct. 2012 à 02:39
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 16 oct. 2012 à 21:38
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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 oct. 2012 à 08:29
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
0
cs_iceman64b Messages postés 30 Date d'inscription mardi 28 février 2006 Statut Membre Dernière intervention 5 mars 2013
16 oct. 2012 à 13:35
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 ?
0
Utilisateur anonyme
16 oct. 2012 à 19:38
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 oct. 2012 à 21:38
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
0
Rejoignez-nous