Jag har ett program som kollar upp versionsnumret på andra exe-filer med den här koden: Problemet är att assemblyt laddas in i appdomainen, och saker kan inte laddas ut ur appdomains, man måste skrota appdomainen för att det ska gå.. Skrota den gör du antingen genom att starta om ditt program, eller att skapa en ny appdomain (så du har två), där du laddar in skumma saker du vill labba på =) När du sedan labbat klart kan du slänga din labbdomän. Hittade en gammal kod som du kanske kan använda och konvertera: <b>Annars går det väl att ta fram version på ett assembly utan att ladda in det..? </b> http://www.aspemporium.com/howto.aspx?hid=12 Jag har inte testat din kod, men det är AssemblyVersion jag vill ha, inte FileVersion. Antar att den koden plockar fram FileVersion? Jepp, stämmer. Ska du ha assemblyversion så måste du nog köra den hårda vägen och skapa en appdomain, eller göra ett fulhack och exekvera en ny process som plockar ut det du ska ha, skickar tillbaka, och sedan stänger av sig självt..Program släpper inte filer
<code>
Dim Dir As New System.IO.DirectoryInfo(Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\")))
Dim Files() As System.IO.FileInfo
Dim i As Integer
Files = Dir.GetFiles
For i = 0 To Files.Length - 1
If Files(i).Extension.ToLower = ".exe" Then
Dim ExeAssembly As System.Reflection.Assembly = System.Reflection.Assembly.LoadFile(Files(i).FullName)
Messagebox.Show(ExeAssembly.GetName().Version.Major.ToString)
End If
Next
</code>
Efter det så verkar filerna vara låsta, så jag antar att mitt program inte släpper dom av nån anledning.
Hur löser jag det?
/ThomasSv: Program släpper inte filer
Annars går det väl att ta fram version på ett assembly utan att ladda in det..?
En variant, lite fulare dock, är att du läser in ditt assembly i minnet först, stänger filen, och sedan läser in bytearrayen som ett assembly. På så vis låser du inga filer, men du laddar fortfarande in saker i ditt programs minne som du inte kan ladda ur.Sv: Program släpper inte filer
**************************************
Name: Get Version Number for EXE, DLL or
OCX files
Description:This function will retrieve
the version number, product name, origin
al program name (like if you right click
on the EXE file and select properties, t
hen select Version tab, it shows you all
that information) etc
By: Serge
Returns:FileInfo structure
Assumes:Label (named Label1 and make it
wide enough, also increase the height of
the label to have size of the form), Com
mon Dilaog Box (CommonDialog1) and a Com
mand Button (Command1)
This code is copyrighted and haslimited warranties.Please see http://www
.Planet-Source-Code.com/vb/scripts/ShowC
ode.asp?txtCodeId=4976&lngWId=-1for details.**************************************
Public Function GetFileVersionInformatio
n(ByRef pstrFieName As String, ByRef tFi
leInfo As FILEINFO) As VerisonReturnValu
e
Dim lBufferLen As Long, lDummy As Long
Dim sBuffer() As Byte
Dim lVerPointer As Long
Dim lRet As Long
Dim Lang_Charset_String As String
Dim HexNumber As Long
Dim i As Integer
Dim strTemp As String
'Clear the Buffer tFileInfo
tFileInfo.CompanyName = ""
tFileInfo.FileDescription = ""
tFileInfo.FileVersion = ""
tFileInfo.InternalName = ""
tFileInfo.LegalCopyright = ""
tFileInfo.OriginalFileName = ""
tFileInfo.ProductName = ""
tFileInfo.ProductVersion = ""
lBufferLen = GetFileVersionInfoSize(pstr
FieName, lDummy)
If lBufferLen < 1 Then
GetFileVersionInformation = eNoVersion
Exit Function
End If
ReDim sBuffer(lBufferLen)
lRet = GetFileVersionInfo(pstrFieName, 0
&, lBufferLen, sBuffer(0))
If lRet = 0 Then
GetFileVersionInformation = eNoVersion
Exit Function
End If
lRet = VerQueryValue(sBuffer(0), "\VarFi
leInfo\Translation", lVerPointer, lBuffe
rLen)
If lRet = 0 Then
GetFileVersionInformation = eNoVersion
Exit Function
End If
Dim bytebuffer(255) As Byte
MoveMemory bytebuffer(0), lVerPointer, l
BufferLen
HexNumber = bytebuffer(2) + bytebuffer(3
) * &H100 + bytebuffer(0) * &H10000 + by
tebuffer(1) * &H1000000
Lang_Charset_String = Hex(HexNumber)
'Pull it all apart:
'04------= SUBLANG_ENGLISH_USA
'--09----= LANG_ENGLISH
' ----04E4 = 1252 = Codepage for Windows
:Multilingual
Do While Len(Lang_Charset_String) < 8
Lang_Charset_String = "0" & Lang_Charset
_String
Loop
Dim strVersionInfo(7) As String
strVersionInfo(0) = "CompanyName"
strVersionInfo(1) = "FileDescription"
strVersionInfo(2) = "FileVersion"
strVersionInfo(3) = "InternalName"
strVersionInfo(4) = "LegalCopyright"
strVersionInfo(5) = "OriginalFileName"
strVersionInfo(6) = "ProductName"
strVersionInfo(7) = "ProductVersion"
Dim buffer As String
For i = 0 To 7
buffer = String(255, 0)
strTemp = "\StringFileInfo\" & Lang_Char
set_String _
& "\" & strVersionInfo(i)
lRet = VerQueryValue(sBuffer(0), strTemp
, _
lVerPointer, lBufferLen)
If lRet = 0 Then
GetFileVersionInformation = eNoVersion
Exit Function
End If
lstrcpy buffer, lVerPointer
buffer = Mid$(buffer, 1, InStr(buffer, v
bNullChar) - 1)
Select Case i
Case 0
tFileInfo.CompanyName = buffer
Case 1
tFileInfo.FileDescription = buffer
Case 2
tFileInfo.FileVersion = buffer
Case 3
tFileInfo.InternalName = buffer
Case 4
tFileInfo.LegalCopyright = buffer
Case 5
tFileInfo.OriginalFileName = buffer
Case 6
tFileInfo.ProductName = buffer
Case 7
tFileInfo.ProductVersion = buffer
End Select
Next i
GetFileVersionInformation = eOK
End Function
'-----------
Private Sub Command1_Click()
Dim strFile As String
Dim udtFileInfo As FILEINFO
On Error Resume Next
With CommonDialog1
.Filter = "All Files (*.*)|*.*"
.ShowOpen
strFile = .FileName
If Err.Number = cdlCancel Or strFile = "
" Then Exit Sub
End With
If GetFileVersionInformation(strFile, ud
tFileInfo) = eNoVersion Then
MsgBox "No version available for this fi
le", vbInformation
Exit Sub
End If
Label1 = "Company Name: " & udtFileInfo.
CompanyName & vbCrLf
Label1 = Label1 & "File Description:" &
udtFileInfo.FileDescription & vbCrLf
Label1 = Label1 & "File Version:" & udtF
ileInfo.FileVersion & vbCrLf
Label1 = Label1 & "Internal Name: " & ud
tFileInfo.InternalName & vbCrLf
Label1 = Label1 & "Legal Copyright: " &
udtFileInfo.LegalCopyright & vbCrLf
Label1 = Label1 & "Original FileName:" &
udtFileInfo.OriginalFileName & vbCrLf
Label1 = Label1 & "Product Name:" & udtF
ileInfo.ProductName & vbCrLf
Label1 = Label1 & "Product Version: " &
udtFileInfo.ProductVersion & vbCrLf
End Sub
Sv:Program släpper inte filer
Du vet inte hur?
/ThomasSv: Program släpper inte filer
Klassen FileVersionInfo verkar se intressant ut. Andra träffen på http://www.google.com/search?hl=en&q=get+version+information+about+dll+exe+c%23 ;)
Google ftw =)Sv:Program släpper inte filer
/ThomasSv: Program släpper inte filer