dポイントプレゼントキャンペーン実施中!

こんばんは、みなさん。

少し前に以下の質問でプログラムを作っていただいたのですが、
WindowsXPだとうまく動くのに、Windows2000だとうまく動作しません。

http://question.woman.excite.co.jp/kotaeru.php3? …

具体的には、「ZIP作成メイン」【CreateZIP(p_strZipName, p_colParams)】関数の以下の部分で、
オブジェクト実行エラーで引数の指定が間違っているとか何かのエラーが表示されました。

'書庫オブジェクトを取得する
Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName))

XPではうまく動いているので、おそらくはVBScriptのインタプリタ側に
何らかの違いがあるようです。
この構文の代わりに有効なコードを書きたいと思います。

よろしくお願いします。

A 回答 (9件)

どうも10500YEN(←よく見てね)です。



>ZIPに関連しない部分だけ抜き出したサンプルでも
>Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName))
いいえ、ここがそのOSでZIPを扱えるかどうかの、一番の要です。


WIN2000環境で
(1)ZIPFLDR.DLLをレジストリ登録しましたか?
(2)それによって、エクスプローラで書庫ファイルの一覧が表示できるようになりましたか?

それができなければ、ネームスペースとしてのオブジェクトを取得は無理です。
2000環境を潰したので、私のところでの実験はできません。
以前、#5にて発言した内容について、onoohnoさんがどのような対応をしたのでしょうか?

それがわかると、無理かどうかもはっきり発言できるのですが、
今の段階では、まずは#5の発言で示した内容を行動してみてくださいとしか
言えません。。。

この回答への補足

105YENさん、こんばんは。
>Set l_objZIP = m_objShell.NameSpace(CStr(p_strZipName))
はどう解釈すればよいのでしょうか?
単に新しいシェルオブジェクトを作ってるだけに見えてます。

たしかにXP環境でZIPFLDR.DLLをリネームしてみたら、
書庫が作成できなかったのは確認しました。
明日2000環境でどうなるか確認してみます。
zipfldr.dllを%windir%\system32\に入れて、
次のコマンドを実行すればよいのでしょうか?

regsvr32 %windir%\system32\zipfldr.dll

やり方を確認できたら試してみます。
よろしくお願いします。

補足日時:2006/04/04 00:36
    • good
    • 0

レスが遅くなってすいません。



そうですかー。
何とかしてあげたいですが、各DLLについてはこちらで渡すことができる代物ではないので、どうしようもないですねー

残念ですが、お役に立てないようです。
すいません。。。。
    • good
    • 1
この回答へのお礼

ここまでいろいろ知識が増えたのでそれはそれで良かったです。
もし9x系OSを触る機会があったら試してみます。
それではこの質問は締め切ります。
いろいろありがとうございました。

お礼日時:2006/04/14 23:46

やりかたはあっていると思います。


その結果、エクスプローラでZIPの内容を確認できましたか?
それをこちらも知りたいです。

それと
>ZIPFLDR.DLL
以外に
DZIP32.DLL
DUNZIP32.DLL
が必要なようです。
http://homepage2.nifty.com/winfaq/w2k/hints.html …
http://linuxmemo.dip.jp/theme.htm

これでエクスプローラで表示ができなければ、Win2000環境化では無理として、アーカイバを利用するしか思いつきません。

この回答への補足

エクスプローラーでZIPの内容を確認するのはまだやってませんでした。
明日やってみます。また、DZIP32.DLLとDUNZIP32.DLLも同じように
例のコマンドでやるということでよいでしょうか?
手順の確認をしてると週一ペースになってしまうので、コマンドは同様でやります。
環境依存は美しくないので、それでできなかったらZIPは諦めます。

補足日時:2006/04/10 21:31
    • good
    • 0
この回答へのお礼

まず、DZIP32.DLLとDUNZIP32.DLLが入手できませんでした。
DZIP32.DLLをダウンロードしようと思ってWEB検索したところ、
1050YENさんの言っている方法と同じことをやっている個人サイトがありました。
DLLはMeや98Plusに入ってるようですが、あいにくこれらのOSがありません。
XPにはないようです。どうすればよいでしょうか?
DLLが入手できなければ今回は諦めようと思います。

お礼日時:2006/04/12 23:16

>>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"コマンドを実行したのですが、
やっぱり同じエラーが出てしまいました。
何かやり方が間違っていたのでしょうか?

よろしくお願いしますです。

補足日時:2006/04/08 02:04
    • good
    • 0

以前の発言の当事者@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円なら本当に出してもいいと思ってます。

補足日時:2006/04/02 12:45
    • good
    • 0

>ZIPうんぬんとは関係ないようですけど。

。。
そうですね。
ZIP.VBSのREADME(ZIP.TXT) には、確認できないがwindows2000で動くと思うというように書いてあったけど、してみると、動かなかったというわけですね。
誰か、Windows2000で他に試してみた人はいないのかな・
今は使っていないのですけど、
昔Windows2000を使っていたときの記憶によると、windows2000でエクスプローラーからフォルダを圧縮してZIPファイルを作れたような記憶があるんだけど・・
    • good
    • 0
この回答へのお礼

例のコードを書いてくれた人に、動かなかった短いサンプルを見てもらってます。
もし、それで解決できないようなら今回は一旦保留にします。
また別の質問でお願いします。ありがとうございました。

お礼日時:2006/04/02 12:49

追伸です。

Win2Kでも、コマンドラインのMakecab.exeは使えそうなので
これをShellで呼び出しても良さそうです。
キャビネットファイルはWinXPのZipファイルと同等の雰囲気?
検証はしていません。ごみレスご容赦を。
    • good
    • 0
この回答へのお礼

最悪cabファイルでもやってみます。
自作のバックアップツールでバックアップファイルを圧縮したいだけなので、
できなかったらできなかったでしかたないと思ってます。
毎日15MBくらいのバックアップができるので、1週間でローテートさせればいいかなというところです。
またよろしくお願いします。ありがとうございました。

お礼日時:2006/04/02 12:53

あれはWindowsXPから可能となったZIPファイルをフォルダとして扱う機能を


利用してますのでWin2000では到底無理と思います。

VBSで何らかのDLLを扱えれば何とかなるのかもしれませんが、ちょっと分かりません

↓ここが参考となるかも
統合アーカイバプロジェクト
http://www.madobe.net/archiver/index.html
    • good
    • 0
この回答へのお礼

やはりソースコード側の問題ではなかったんですね。。。
かなり調べましたが使い方は誤ってなかったですから。
教えていただいたURLを見てDLLとか探してみます。
ありがとうございました。

お礼日時:2006/03/23 23:26

windows2000でもNameSpace は、使えるはずなので、


http://msdn.microsoft.com/library/default.asp?ur …
引数として渡したフォルダの指定がおかしいか
権限がないんじゃないかと思います。
    • good
    • 0
この回答へのお礼

BLUEPIXYさんはいろいろやってるんですね。
そう思ってもっと短くサンプルを作ってみたのですが、
やはり特段の間違いはありませんでした。
どうやらNo.2さんの書き込みのとおりの原因らしいです。
でも腑に落ちないのは、shell.applicationオブジェクトを作って、
そのNameSpaceメソッドを使ってるだけなのに、
ZIPうんぬんとは関係ないようですけど。。。

お礼日時:2006/03/23 23:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!