.cab ファイルに含まれるファイルのバージョン番号を取得する小さなアプリを作成しました。
cab から一時ディレクトリにすべてのファイルを抽出し、すべてのファイルをループして、次のようにバージョン番号を取得します。
//Attempt to load .net assembly to retrieve information
Assembly assembly = Assembly.LoadFile(tempDir + @"\" + renameTo);
Version version = assembly.GetName().Version;
DataRow dr = dt.NewRow();
dr["Product"] = renameTo;
dr["Version"] = version.ToString();
dt.Rows.Add(dr);
次に、終了したら、次のように抽出されたすべてのファイルを削除します。
foreach (string filePath in filePaths)
{
//Remove read-only attribute if set
FileAttributes attributes = File.GetAttributes(filePath);
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
File.SetAttributes(filePath, attributes ^ FileAttributes.ReadOnly);
}
File.Delete(filePath);
}
これは、.net .exe で時々失敗することを除いて、すべてのファイルで機能します。ロックされているように見えないように、ファイルを手動で削除できます。
この作業を行うには、何を探す必要がありますか? Assembly.LoadFile はおそらくファイルをロックしていますか?