申し訳ありませんが、物理ファイルがないとできません。
FileVersion を読み取る唯一の方法は、パスのみを受け入れるFileVersionInfo.GetVersionInfoを使用することです。
また、リフレクターを使用してファイルバージョンを読み取る方法を確認すると、使用できない安全でないネイティブ内部メソッドがいくつか表示されます...
private static string GetFileVersionString(IntPtr memPtr, string name)
{
int num;
string str = "";
IntPtr zero = IntPtr.Zero;
if (UnsafeNativeMethods.VerQueryValue(new HandleRef(null, memPtr), name, ref zero, out num) && (zero != IntPtr.Zero))
{
str = Marshal.PtrToStringAuto(zero);
}
return str;
}
たぶん、いくつかのDllImportで取得できます。しかし、これは私の知る限りではありません。
解決する場合は、 DotNetZipライブラリAssemblyVersion
を使用できます。
Assembly assembly;
using (var data = new MemoryStream())
{
using (ZipFile zip = ZipFile.Read(LocalCatalogZip))
{
zip["assembly.dll"].Extract(data);
}
data.Seek(0, SeekOrigin.Begin);
assembly = Assembly.ReflectionOnlyLoad(data.ToArray());
}
var version = assembly.GetName().Version;
- - - - - - - - アップデート - - - - - - - - -
最後の考え: おそらく一時フォルダーにファイルを書き込む権限がある: Path.GetTempPath