■81310 / inTopicNo.23) |
Re[4]: ビルド日時をEXEファイルに書き込む方法 |
□投稿者/ 魔界の仮面弁士 (889回)-(2016/09/07(Wed) 10:23:39)
|
■No81295 (倍子 さん) に返信 > win7ですが、右クリックメニューに > ファイルバージョンと製品バージョンがあり > 製品バージョンがAssemblyVersionだと思っていたのですが > どうも違っていて、右クリックメニューにはAssemblyVersionが表示されていないことが分かりました。
現行 OS では見かけませんが、XP では、ファイルのプロパティに "Assembly Version" という項目が表示されていたようです。 http://www.atmarkit.co.jp/fdotnet/dotnettips/187asmverinfo/asmverinfo.html
Windows 7 で確認する場合は、VS2010 の[ファイル]-[開く]-[ファイル]で exe ファイルを直接開き、"Version" リソースを開くと表示される "Assembly Version" というエントリーで確認あるいは編集できます。 (VB2010 Express で可能かどうかは分かりません)
ちなみに、この Assembly Version を確認するためには、 VerQueryValue API を利用できます。 No81295 で取得できる アセンブリバージョンとは別の項目ですが、通常は 同じ値が書きこまれているはずです。
Imports System.Reflection Imports System.Runtime.InteropServices Module Module1 Private Declare Auto Function GetFileVersionInfoSize Lib "version" (ByVal fileName As String, <Out()> ByRef handle As Integer) As Integer Private Declare Auto Function GetFileVersionInfo Lib "version" (ByVal fileName As String, ByVal handle As Integer, ByVal length As Integer, <MarshalAs(UnmanagedType.LPArray, SizeParamIndex:=2)> ByVal lpData() As Byte) As Boolean Private Declare Auto Function VerQueryValue Lib "version" (ByVal block() As Byte, ByVal subBlock As String, ByRef ptr As IntPtr, ByRef length As Integer) As Boolean
Public Function GetAssemblyVersion() As String Dim filePath As String = Assembly.GetExecutingAssembly().Location Dim dummy As Integer = 0 Dim size As Integer = GetFileVersionInfoSize(filePath, dummy) If size = 0 Then Return Nothing End If Dim block(size - 1) As Byte If GetFileVersionInfo(filePath, dummy, block.Length, block) Then Dim subBlock As String = "\StringFileInfo\000004b0\Assembly Version" Dim ptr As IntPtr = IntPtr.Zero, length As Integer = 0 If VerQueryValue(block, subBlock, ptr, length) Then If ptr <> IntPtr.Zero Then Dim s As String = Marshal.PtrToStringAuto(ptr) Return s End If End If End If Return Nothing End Function End Module
|
|