タイトル : CreateObjectにてShell32を使用してZIPが展開されない。 投稿日 : 2008/12/01(Mon) 15:23 投稿者 : おばおば
開発環境: Microsoft Visual Studio 2005 Version 8.0.50727.762 OS: Mirosoft Windows XP Professional Version2002 ServicePack 2 はじめまして。いつも参考にさせていただいております。 VB.NETでShell32を使用してZIPを展開しようとしております。 開発中に不可解な現象に遭遇いたしました。 お分かりになる方、おられませんでしょうか。 下記コードのように、destFlderにShell32.Folderを指定すると問題なく展開できます。 ' zip展開 Dim sc As Object = Nothing Dim srcFlder As Object = Nothing Dim items As Object = Nothing Dim destFlder As Shell32.Folder = Nothing Try sc = CreateObject("Shell.Application") srcFlder = sc.NameSpace(mcnsWorkPath & mcnsMenuZipName) items = srcFlder.items destFlder = sc.NameSpace(mcnsWorkPath) destFlder.CopyHere(items, FOF_NOCONFIRMATION + FOF_SILENT + FOF_NOCONFIRMMKDIR) Finally If Not sc Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(sc) sc = Nothing End If If Not destFlder Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(destFlder) destFlder = Nothing End If If Not srcFlder Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(srcFlder) srcFlder = Nothing End If If Not items Is Nothing Then System.Runtime.InteropServices.Marshal.ReleaseComObject(items) items = Nothing End If End Try しかし、このコードでShell32.Folderの部分をObjectに置き換えると、 展開が行われず、エラーにもならずに処理が終わってしまいます。 Webを検索してみたところ、 通常はObjectで問題なく処理出来ているように見えましたので、 私の環境だけかと思い、 私のOSだけでなく他のOSでも試してみたのですが、同様の結果となりました。 Shell32.DLLは1MBもあり、配布を避けるために、 参照に追加しない方法を考えており、上記のコードにて実装しようとしております。 よろしくお願いします。 |