Shell32.dll を使用して単純な圧縮ファイルを解凍しようとしています。開発用 PC (Win7 64) で Interop.Shell.dll として表示される Shell32.dll への参照があります。中央の場所からファイル コピーを介して exe の更新をプッシュし、.dll に対してこれを実行したいと考えています。良い。
PC にインストールされているのと同じファイルを使用して、XP でプログラムが失敗します。XP \Windows\System の Shell.dll を Interop.Shell.dll に名前を変更して使用しようとしましたが、それは簡単だと思います。dll を呼び出そうとすると、読み込めないというエラーが発生します。
私は、プラットフォームにとらわれないdllを使用する解凍を行う別の方法も開いています。Process.Start() 経由で 7Zip を使用しましたが、クライアントにプログラムをインストール/更新する必要はありません。
XP 以降の任意の Win OS で実行できる共通の分母 Shell32.dll はありますか?
または、Shell32.dll を使用する場合、OS ごとに個別のビルドを作成する必要がありますか?
ありがとう!
Function Unzip(FilePathofZip As String, DestinationFolder As String) As Boolean
Try
Dim sFile As String = FilePathofZip
' requires referenc to windows.system.shell32.dll
Dim sc As New Shell32.Shell()
If IO.Directory.Exists(DestinationFolder) Then IO.Directory.Delete(DestinationFolder, True)
Application.DoEvents()
IO.Directory.CreateDirectory(DestinationFolder)
'Declare the folder where the files will be extracted
Dim output As Shell32.Folder = sc.NameSpace(DestinationFolder)
If FilePathofZip.EndsWith(".kmz") Then
sFile = FilePathofZip & ".zip"
IO.File.Move(FilePathofZip, sFile)
Application.DoEvents()
End If
'Declare your input zip file as folder
Dim input As Shell32.Folder = sc.NameSpace(sFile)
'Extract the files from the zip file using the CopyHere command .
output.CopyHere(input.Items, 4)
Return True
Catch ex As Exception
MsgBox(ex.Message)
Return False
End Try
End Function