- ベストアンサー
Shell.ApplicationのNameSpaceを書き換えたい
- WindowsXPとWindows2000でのShell.ApplicationのNameSpaceの挙動の違いについて質問です。
- WindowsXPでは正常に動作するのに、Windows2000ではオブジェクト実行エラーが発生してしまいます。
- VBScriptのインタプリタの違いが原因だと思われるため、適切なコードに書き換えたいと考えています。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
どうも10500YEN(←よく見てね)です。 >ZIPに関連しない部分だけ抜き出したサンプルでも >Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName)) いいえ、ここがそのOSでZIPを扱えるかどうかの、一番の要です。 WIN2000環境で (1)ZIPFLDR.DLLをレジストリ登録しましたか? (2)それによって、エクスプローラで書庫ファイルの一覧が表示できるようになりましたか? それができなければ、ネームスペースとしてのオブジェクトを取得は無理です。 2000環境を潰したので、私のところでの実験はできません。 以前、#5にて発言した内容について、onoohnoさんがどのような対応をしたのでしょうか? それがわかると、無理かどうかもはっきり発言できるのですが、 今の段階では、まずは#5の発言で示した内容を行動してみてくださいとしか 言えません。。。
その他の回答 (8)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
レスが遅くなってすいません。 そうですかー。 何とかしてあげたいですが、各DLLについてはこちらで渡すことができる代物ではないので、どうしようもないですねー 残念ですが、お役に立てないようです。 すいません。。。。
お礼
ここまでいろいろ知識が増えたのでそれはそれで良かったです。 もし9x系OSを触る機会があったら試してみます。 それではこの質問は締め切ります。 いろいろありがとうございました。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
やりかたはあっていると思います。 その結果、エクスプローラでZIPの内容を確認できましたか? それをこちらも知りたいです。 それと >ZIPFLDR.DLL 以外に DZIP32.DLL DUNZIP32.DLL が必要なようです。 http://homepage2.nifty.com/winfaq/w2k/hints.html#1071 http://linuxmemo.dip.jp/theme.htm これでエクスプローラで表示ができなければ、Win2000環境化では無理として、アーカイバを利用するしか思いつきません。
お礼
まず、DZIP32.DLLとDUNZIP32.DLLが入手できませんでした。 DZIP32.DLLをダウンロードしようと思ってWEB検索したところ、 1050YENさんの言っている方法と同じことをやっている個人サイトがありました。 DLLはMeや98Plusに入ってるようですが、あいにくこれらのOSがありません。 XPにはないようです。どうすればよいでしょうか? DLLが入手できなければ今回は諦めようと思います。
補足
エクスプローラーでZIPの内容を確認するのはまだやってませんでした。 明日やってみます。また、DZIP32.DLLとDUNZIP32.DLLも同じように 例のコマンドでやるということでよいでしょうか? 手順の確認をしてると週一ペースになってしまうので、コマンドは同様でやります。 環境依存は美しくないので、それでできなかったらZIPは諦めます。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
>>Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName)) >はどう解釈すればよいのでしょうか? >単に新しいシェルオブジェクトを作ってるだけに見えてます。 「単に新しいシェルオブジェクトを作ってる」部分は ⇒Set m_objShell = CreateObject("Shell.Application") です。 そのシェルオブジェクト.NameSpace(パス文字列)は、、、、 エクスプローラを表示すると、 ・左側にTreeView[フォルダ一覧] ・右側にListView[ファイル一覧] がありますよね? そのフォルダ一覧側で選択したような状態を示します。 なので、エクスプローラがZIPに対応していないような状態のままで、 シェルオブジェクト.NameSpace[ZIPファイル]は無理なのです。 前にも言いましたように、私には環境が無いので正確な情報が言えませんが、、、、 Win2000にはzipfldr.dllが入っているのでしょうか? であれば、regsvr32にzipfldr.dllをドラッグしてあげてみてください。 レジストリ登録が成功したら、再起動後、エクスプローラでZIPの内容を 見ることができるできるかも確認してください。
補足
こんばんは、1050YENさん。 シェルオブジェクト.NameSpace(パス文字列)は、 フォルダ一覧側で選択したような状態ですか。 何となくわかりました。 それで、、C:\WINNT\SYSTEM32フォルダ直下にzipfldr.dllを入れて、 コマンドプロンプトで上記ディレクトリに移動して、 "regsvr32 zipfldr.dll"コマンドを実行したのですが、 やっぱり同じエラーが出てしまいました。 何かやり方が間違っていたのでしょうか? よろしくお願いしますです。
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
以前の発言の当事者@5000円要求です。 ZIPFLDR.DLL が、レジストリに登録されているかが関係するのかな? http://osaka.cool.ne.jp/cyberidoc/cmd/092.html http://www.lhut32.com/kanren.html これでできないのであれば、アーカイバを利用する以外に思いつきません。
補足
以下のような感じでZIPに関連しない部分だけ抜き出したサンプルでも なぜかうまく行きませんでした。 (実際に動かしたコードと全く同じかは?ですが) ----- Const DEF_ZIP_PATH = "C:\書庫.zip" '書庫保存先固定 Dim m_objFso Dim m_objShell Set m_objFso = CreateObject("Scripting.FileSystemObject") Set m_objShell = CreateObject("Shell.Application") If Not CreateZIP(p_strZipName, p_colParams) Then Exit Function End If Private Function CreateZIP(p_strZipName, p_colParams) Dim l_objZIP Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName)) End Function ----- フォルダの権限等もadministratorなので問題ないはずなので、 これはW2Kがクラス(オブジェクト?)に非対応なのでしょうか? m_objShell.NameSpaceに文字列を渡すだけのようですけど。。。 無理そうなら今回は一旦終了しますが何かあればお願いします。 今回解決できたら1050円なら本当に出してもいいと思ってます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>ZIPうんぬんとは関係ないようですけど。。。 そうですね。 ZIP.VBSのREADME(ZIP.TXT) には、確認できないがwindows2000で動くと思うというように書いてあったけど、してみると、動かなかったというわけですね。 誰か、Windows2000で他に試してみた人はいないのかな・ 今は使っていないのですけど、 昔Windows2000を使っていたときの記憶によると、windows2000でエクスプローラーからフォルダを圧縮してZIPファイルを作れたような記憶があるんだけど・・
お礼
例のコードを書いてくれた人に、動かなかった短いサンプルを見てもらってます。 もし、それで解決できないようなら今回は一旦保留にします。 また別の質問でお願いします。ありがとうございました。
- nicotinism
- ベストアンサー率70% (1019/1452)
追伸です。Win2Kでも、コマンドラインのMakecab.exeは使えそうなので これをShellで呼び出しても良さそうです。 キャビネットファイルはWinXPのZipファイルと同等の雰囲気? 検証はしていません。ごみレスご容赦を。
お礼
最悪cabファイルでもやってみます。 自作のバックアップツールでバックアップファイルを圧縮したいだけなので、 できなかったらできなかったでしかたないと思ってます。 毎日15MBくらいのバックアップができるので、1週間でローテートさせればいいかなというところです。 またよろしくお願いします。ありがとうございました。
- nicotinism
- ベストアンサー率70% (1019/1452)
あれはWindowsXPから可能となったZIPファイルをフォルダとして扱う機能を 利用してますのでWin2000では到底無理と思います。 VBSで何らかのDLLを扱えれば何とかなるのかもしれませんが、ちょっと分かりません ↓ここが参考となるかも 統合アーカイバプロジェクト http://www.madobe.net/archiver/index.html
お礼
やはりソースコード側の問題ではなかったんですね。。。 かなり調べましたが使い方は誤ってなかったですから。 教えていただいたURLを見てDLLとか探してみます。 ありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
windows2000でもNameSpace は、使えるはずなので、 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/objects/shell/namespace.asp 引数として渡したフォルダの指定がおかしいか 権限がないんじゃないかと思います。
お礼
BLUEPIXYさんはいろいろやってるんですね。 そう思ってもっと短くサンプルを作ってみたのですが、 やはり特段の間違いはありませんでした。 どうやらNo.2さんの書き込みのとおりの原因らしいです。 でも腑に落ちないのは、shell.applicationオブジェクトを作って、 そのNameSpaceメソッドを使ってるだけなのに、 ZIPうんぬんとは関係ないようですけど。。。
補足
105YENさん、こんばんは。 >Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName)) はどう解釈すればよいのでしょうか? 単に新しいシェルオブジェクトを作ってるだけに見えてます。 たしかにXP環境でZIPFLDR.DLLをリネームしてみたら、 書庫が作成できなかったのは確認しました。 明日2000環境でどうなるか確認してみます。 zipfldr.dllを%windir%\system32\に入れて、 次のコマンドを実行すればよいのでしょうか? regsvr32 %windir%\system32\zipfldr.dll やり方を確認できたら試してみます。 よろしくお願いします。