- ベストアンサー
実行時のエラー。動作環境の確保
複数の機械(PC-9821 V12;Win95; FMV S3 20;Win95, FMV ME3/505;Win98SE, DELL XPS R450;Win98SE, Aptiva573;Win98, Gateway G6-200;Win95)で実行状況を見ています(Win2000は使えなくなった)。 開発は ME3/505 で行い他の機械で動くかどうかを調べています。 参照設定は Visual Basic For Application Visual Basic runtime object and peocedures Visual Basic object and procedures OLE automation の4つです。 バージョンは Microsoft Visual Basic 6.0(SP5) For 62-bit Windows Development です。 現時点で配布可能な形体にする方法が分からないので RedHouse氏のVisual Basic 6.0 SP5 ランタイムライブラリ http://www.vector.co.jp/soft/win95/util/se188840.html を使用しています。 先に書きました通り、ADO, DAOは使用していません。使い方がわかりません(下記参照)。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=683267 しかし.なぜか. 実行時エラー '429' ActiveXコンポーネットはオブシェクトを作成できません。 が発生します。 すべての機械にVisual Studio をインストールすればよいかもしれません(使用者・所有者がすべて同一人物ですから法律上の問題はないでしょう)が、言語を取り扱う機械は通信回線を切断しておきたい(ウイルス対策)のです。 Visual Studioを導入することなく、すべての機械でEXEファイルコピーだけで動作するようにするには、どのようなことをしたらよいのでしょうか。 なお MDAC 2.7 SP1(下記回答内参照アドレスよりDl)を実行しましたが http://oshiete1.goo.ne.jp/kotaeru.php3?q=510091 と同様に動かない機械では dao360.dll が存在しません。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
>おかげさまで、インタープリターで再現できました。 >バッチ処理とファイルシステムが同居しているとは、恐れ入ったOSです。 バッチ処理にファイルシステムが同居してというとちょっとニュアンスが違うような。 様々な機能を呼び出すことができる機能をバッチ処理が持っている ということになります。 今回はaramanantoさんが知らないうちに、ファイルシステムの情報を 取得する機能を使っていたということになります。 CreateObjectでActiveXを呼び出している時点で 別のアプリをコールしているようなものです。 DOSでいう外部コマンドのような感覚ですかね。 >C:\windows\, C:\Windows\System はレジストリから取得可能ですが、 >他の情報取得の見込みが立っていません。 >DriveListBoxが取得可能な情報緯度は何かの手段が残されているものと考えています。 >一部取得方法(GetSystemDirectory, GetTempPath, GetVolumeInformation)が >掲載されていたサイトがかりましたが.該当方法は文法エラー等で動きません。 WindowsAPIのコールになります。 http://www.vbvbvb.com/jp/gtips/0501/gGetSystemDirectory.html http://www.vbvbvb.com/jp/gtips/0101/gGetTempPath.html http://www.vbvbvb.com/cgi-bin/namazu.cgi?query=GetVolumeInformation&submit=%8C%9F%8D%F5&whence=0&max=20&result=normal&sort=score&idxname=gtips_nocode Declare Functionの宣言をされていないのでは? >C:\windows\system\scrrun.dll が関係しているまでは追跡できましたが. >どこまでレジストリを変更すれば動作するのかは不明です。 scrrun.dllはWindowsScriptを実行するために必要なDLLのうちの1つです。 WSHの本体はこれではないです。 >つまり、通常システム領域から削除し、実行するときに限って複写、 >レジストリーを操作して実行可能な状態にし、実行し、 >実行終了時に元の状態に戻す方法です。 なので、これだけでは無理かと。 >WindowsScriptは、外部オペレーターが作成したバッチ処理をオペレーターの >介在なしにユーザーとして実行できる危険極まりない処理機構です。 危険であるかわりに便利です。 どちらをとるかですね。 ただし、あくまでもローカルで実行したときのみ様々なことができます。 また、WinNT系のOSでは、適切なユーザ権限がないとすべての処理は行えません。 #Win9xでは権限がないところに問題がありますが。 >ですから、インターネットに接続する場合には原則として導入していません。 これは無理でしょうね。 Windows98以降にはOSの一部として標準で組み込まれています。
その他の回答 (9)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>システムディレクトリ名は >[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup] >より、作業ディレクトリ名は >[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\VolumeCaches\Temporary files] >より取得可能のようです(レジストリから読むルーチンを作成)。 すでに動いているようなので、参考までに・・・ WinXPで見てみましたが、[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup] にそのような情報は書かれていません。Windowsのインストール媒体の位置の情報のはずです。 tempフォルダも、そのレジストリはあくまでもexplorer.exeが使うのであって、そこがシステムとして使用しているというわけではないです。 #指すフォルダは同じだと思いますけど。
お礼
>指すフォルダは同じだと思いますけど。 ご指摘のとおりです。「同じ値が得られる」ので使用することにしました。 WinDir= SysDir= とexplorer.exeの folder= より取得しています。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>Set fs = CreateObject("Scripting.FileSystemObject") "Scripting.FileSystemObject"ですが、 これはWSH(Windows Scripting Host)のモジュールを必要とします。 WindowsScriptについてはこちら。 http://www.microsoft.com/japan/msdn/scripting/default.asp aramanantoさんの環境では、Win95のマシンがターゲットにあるのが微妙です。 現在、Win95はMicrosoftによるサポートが終了しているため、 Win95用として配布されているWSHはありません。 http://www.microsoft.com/downloads/results.aspx?productID=&freetext=WSH&DisplayLang=ja おそらくWin98用のWSH5.5で平気だと思いますが。 これが可能でも、InternetExplorerのバージョンにも依存するはずです。 これも、Win95にインストール可能な最新バージョンである IE5.5SP2の公開が終了してしまっています。 #幸い、VisualStudio6.0にはIEの以前のバージョンのものがCD-ROMに含まれていてインストール可能ですが。 http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/install.htm ここのページによると、DCOMが入っていればいいようなことが書いてあるのでDCOM入れれば平気なのかもしれません。 未確認です。 http://www.microsoft.com/downloads/details.aspx?FamilyID=8f0a100d-1a3c-45c0-bc7e-5c0ab9e776b7&DisplayLang=ja
補足
おかげさまで、インタープリターで再現できました。 バッチ処理とファイルシステムが同居しているとは、恐れ入ったOSです。 C:\windows\, C:\Windows\System はレジストリから取得可能ですが、他の情報取得の見込みが立っていません。DriveListBoxが取得可能な情報緯度は何かの手段が残されているものと考えています。 一部取得方法(GetSystemDirectory, GetTempPath, GetVolumeInformation)が掲載されていたサイトがかりましたが.該当方法は文法エラー等で動きません。 C:\windows\system\scrrun.dll が関係しているまでは追跡できましたが.どこまでレジストリを変更すれば動作するのかは不明です。つまり、通常システム領域から削除し、実行するときに限って複写、レジストリーを操作して実行可能な状態にし、実行し、実行終了時に元の状態に戻す方法です。 WindowsScriptは、外部オペレーターが作成したバッチ処理をオペレーターの介在なしにユーザーとして実行できる危険極まりない処理機構です。ですから、インターネットに接続する場合には原則として導入していません。 使用しない方向で対応を考えています。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>CreateObjectって使ってませんか? 4個所1ルーチンで使用しています。 引数に指定している文字列は何でしょう? おそらく、ここで指定してるActiveX DLL or ActiveX EXEが 存在しないために、 "ActiveXコンポーネットはオブシェクトを作成できません。 " が発生していると思われます。
補足
>引数に指定している文字列は何でしょう? Set fs = CreateObject("Scripting.FileSystemObject") WinDir$ = fs.GetSpecialFolder(0): 'c:\window SysDir$ = fs.GetSpecialFolder(1): 'c:\window\system TmpDir$ = fs.GetSpecialFolder(2): 'c:\window\temp によるシステム系ディレクトリ3箇所の取得 Set fs = CreateObject("Scripting.FileSystemObject") Set d = fs.GetDrive(drvpath) DevTyp& = d.DriveType Select Case DevTyp& Case 0: t = "不明" Case 1: t = "リムーバブル ディスク" (以下略) によるデバイス(drvpath)の種類の取得です。 交換可能な媒体であるか、HDDであるか、その他デバイスであるか、等によって返す引数が異なり3種類のルーチンが存在します。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>どうやって消しました? >ファイルを削除しただけなのではないですか? >特に、C:\Program FilesのファイルやC:\Windowsのなかとか。 特に消し方には問題なさそうです。 確認ですが、プログラムの中で、CreateObjectって使ってませんか? あと、プログラム自体は起動できているでしょうか? プログラム起動時に一番最初に呼ばれる個所にメッセージボックスを表示する等して確認してみてください。
補足
>CreateObjectって使ってませんか? 4個所1ルーチンで使用しています。 >起動できているでしょうか? 起動しています。一部起動直後に動かなくなるソフトもありますが >メッセージボックスを表示する 方法がわからないのでこの方法では試せませんが、コンパイル言語の共通な虫取り方法として、「特定のファィルに実行中のルーチン名をかき出す」という方法があります。 Fotran では90-95を使っていましたが、VBでは490番台を使っています。 これによると初期化ルーチンはきどうしているようです ただ、最後の方が切れる場合があり、どの時点でとまっているかはわかりません。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>最初に言語を使用しているME3/505のシステム構成を説明します。 いきなりシステムといわれても・・・(^^; 一般に通用しない単語は出されても<ME3/505 で、tarataraってなんですか?いろいろ説明かかれてますけど、必要な情報が欠如しているのですが。 BookMarkはなんとなくわかりますけど。 >残る2つはどちらもシステムを導入して,直後にデバイス関係を除くほとんどのソフトを消しています。 どうやって消しました? ファイルを削除しただけなのではないですか? 特に、C:\Program FilesのファイルやC:\Windowsのなかとか。
補足
>tarataraってなんですか 私が作ったソフトの起動関係lnkファイルを入れてあるディレクトリ(と呼んでよいか疑問)です。私の愛称かタラで、タラタラとよく呼ばれています。 C:\window\スタートメニュー\プログラム\taratara\ 一応システムの内容通り半角カナで入力しましたが.gooが自動的に全角に書き換えてくれるはずです。 BookMarkは作ったソフトの名称です。 >どうやって消しました? 複数の方法があります。 1. スタート プログラム (適当に選んで) アンイストール と選択。しばらくして「終わった」という旨のメッセージが出たら、再起動。 2. コントロールパネル アプリケーションの追加と削除 (白枠内を適当に選んで) 追加と削除 (OKとかアンインストール等のメッセージが出たら.OK・継続・アンイントロール等を) (共有ファイルがどうのこうのというメッセージが出たら.残す又は全部のコス) 「終わった」旨のメッセージが出たら再起動。 3. コントロールパネル アプリケーションの追加と削除 Windowsファィル 白枠内の四角の「レ」を消したり.「子細(なんとか)」内の「レ」を消して、 OK そのうち「再起動します」というメッセージが出るので再起動。 以上全部終わったらば.「消せませんでした」と表示されたディレクトリ(以前10時間かけて一覧表を作りました)をまとめてエクスプローラーで削除。ただしC:\Windows\以下は1例外を除き全部残しています。 例外はc:\windows\AOLBak.exe、AOL社とのオンラインプロバイター契約のためのソフトです。 C:\windows\Options\Cabs 内にも残っていますがこちらは残しています。 ディスクトップに消したファイルのlnkファイルが残っているので、まとめてごみ箱に(間違えて残っているソフト関係を消してしまった事があったので全部消してから行っています)。 リカバリーだけで2時間、プリンター等ドライバー導入と電源自動切断停止等のシステムの設定に30分、先に記載した消す作業に2時間、ファイル領域の連続化に多分30分から1時間(寝てしまうので時間が分かりません)かかります。 数日後暇になったときに、レジストリエディタを起動して消したソフト関係と思われるレジストリを削除しています。これは暇を見てしますので、通常はVisual Studioを導入する場合ぐらいしかしません。 C:\Progrom Files\内では先の方法で消したファイルと同じディレクトリ以下に存在するデータファイル等を消します。こちらは、どのファイルがどのプログラムに対応しているかを適当に動かしてタイムスタンプの変化から追跡して一覧表を作成してあります。こちらは1ヶ月くらいかかりました。使う予定のないソフトを動かすことは苦痛以外の何者でもありません。FS.EXE でリストを作り比較して行くだけです。
- todo36
- ベストアンサー率58% (728/1234)
プロジェクト→コンポーネント プロジェクト→参照設定 不要なものは外す。
お礼
「要不要の判断方法」に関する話題については次回以降、機会がありましたらばご指摘いただけましたらば幸いです。 2-3日以内にこのサイトに接続した時点で締め切ります。 ご指摘ありがとうございました。
補足
参照設定の Visual Basic For Application Visual Basic runtime object and peocedures Visual Basic object and procedures OLE automation の4つは、導入直後の状態を維持しています。どれが不要かわからないのですが、要・不要を判断する方法はどのようなものがあるのでしょうか。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
>該当ソフトの起動方法と関係ヘルプファィル名(*.ch*等)をお知らせください。 [スタート] → [プログラム(P)] → [Microsoft Visual Studio 6.0] → [Microsoft Visual Studio 6.0ツール] → [ディストリビューション ウイザード] ヘルプは起動後表示される画面のヘルプボタンを押してください。
補足
最初に言語を使用しているME3/505のシステム構成を説明します。 ME3/505で関係するHDDは3つあります。 1つは内臓で CD-ROMとつながっています。IDEのサブのセカンダリなので起動しません。Dドライブになります。 残る2つはどちらもシステムを導入して,直後にデバイス関係を除くほとんどのソフトを消しています。残っている内容は Acrobat, DAO, モデム, ディスプレイ, IEと RealPlayer 位です。Windowsファイルも残っているのはアクセサリ内ペイント・システムツール・マルチメディア・ユーザー保護・通信です。増設機器としてプリンター・MO・LANがあります。LANはあるだけ程度です。まだ資源管理ソフトを作成していませんから。 片一方には Visual Studio と各種ユーティリテイ(各社辞書等・圧縮解凍等)が入っています。こちらは自己メールアドレスを取得するルーチンを作成した関係で Outlookが残っています。 もう片一方は,インターネット接続関係ソフトとファイル圧縮解凍が入っています。 両者とも,リカバリーの関係(富士通の指示として増設機器を全部取り外してリカバリー。リカバリー終了後機器接続)で2つの領域に分割されています(C:, E:に相当)。 以上はIEのお気に入り・NEのブックマークを整理し局所ファイルを作成するというプログラムを作成している為です。 プライバシーの保護の観点からユーザー名等はタレント・政治家・犯罪者等の有名人が設定されています。大体月1回程度再導入を行なって変更しています。ひとつの物事が終われば再導入をして古い内容を消すことで(JIS用語としての)プライバシーを保護しています。 マイクロソフト社がこのあたりのへんな細工をしているのではないか,という感じがして来ました。 前所有者が IE を導入できなかったという理由で私の所にVisual Studioが回って来たのであり,問題が続くパッケージです。以下が実行結果です。 電源on Windows へようこそ --OK スタート内 プログラム(P)内 Microsoft Visual Studio 6.0内 Microsoft Visual Studio 6.0ツール内 ディストリビューションウィザード 参照(B) -- D:\bas\BookMark\Project1.vbp --開く(O) パッケージ(P) 次へ(N) 次へ(N) D:\bas\BookMark\が表示されているのでそのままにして 次へ(N) フォルター.......続けますか -- はい(Y) 含まれるファイル そのままにして 次へ(N) Cabファイルオプション 単位置のCabファイルが表示されているので,そのままにして 次へ(N) インストール時のタイトル BookMark が表示されているのでそのままにして 次へ(N) 初回起動時に taratara内BookMarkを設定したが,この設定が残っている。そのままにして 次へ(N) セットアップ先の内容をそのままにして 次へ(N) 共有ファイルのしていは,□内をそのままにして 次へ(N) 完了 パッケージレボートをそのままにして 閉じる ディストリビューションウィザードの起動直後の表示に戻ったので 閉じる スタート内 Windowsの終了内 電源を切れる状態にするを指定して OK 電源が切れで30秒ほど待って HDD交換。 電源on Windows へようこそ --OK スタート内 プログラム内 エクスプローラー D:¥BAS¥BookMarkを選択して Setup.exeを指定。直後に(X)を押してエクスプローラ終了 OK セットアップ開始のボタン 前回使用した taratara がのこっているのて,そのままにして,継続 完了しましたと表示されて OK スタート内 プログラム内 taratara内 BookMark で起動。 実行時エラー 429 Active X コンポーネネントはオブシェクトを作成できません となり,結果が代わりません出した。 BookMark.exe を削除,再導入で変化無し。相変わらずエラーがでます。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
これってVBアプリですよね。で、バージョンのところももちろん32bitですよね。 >現時点で配布可能な形体にする方法が分からないので デストリビューションウィザード。 これを使ってインストーラを作成してください。 >Visual Studioを導入することなく、すべての機械で >EXEファイルコピーだけで動作するようにするには、 >どのようなことをしたらよいのでしょうか。 VBで作成する限り、全ての環境でEXEコピーだけで 動作させるのは不可能です。あきらめましょう。 インストーラを使ってランタイムを含めてインストール したあとは、EXEファイル等のコピーによる上書きで 動くこともあります。 #もちろんだめなときもあります。
補足
>デストリビューションウィザード。 >これを使ってインストーラを作成してください。 該当ソフトの起動方法と関係ヘルプファィル名(*.ch*等)をお知らせください。
- ara_ara
- ベストアンサー率35% (124/348)
こちらの5.は参考になりませんか。 http://www.moreexcellent.com/excel/trouble/macro.htm
お礼
レジストリ変更後のレジストリ復旧方法について、ご指摘がありませんでした。わからないのでOSの再導入をしました。 お世話になりました。
補足
実行結果は以下のとおり。 5.「実行時エラー429...」よりバッチファイルを作成 c:Regsvr32.exe /U "C:\PROGRA~1\COMMON~1\MICROS~1\DAO\DAO350.DLL" c:Regsvr32.exe "C:\PROGRA~1\COMMON~1\MICROS~1\DAO\DAO350.DLL" を実行。正常終了らしきメッセージを表示。 dos窓を閉じて再起動。関係ソフトを実行しましたが結果は変わらず。 なお.関係2ファイルの位置は T.Nakamura作高機能ファイル検索ユーティリティ PC9801/21 Version 1.2a (なぜかDOS/Vでも使えて便利)より cd c:\ FS dao350.dll >D:\aaa.bat FS Regsvr32.exe >>D:\aaa.bat にて取得。フィラーとしてはA.Idei作FD ver3.13を使用 ファイルリストからバッチファイルの書き換えはEDIT.EXE を使用。 関係ソフトはニフティ go fgal より入手。 旧レジストリはregedit.exeのWコマンドで残してありますが.復旧方法はありますか。
お礼
サイトのコヒーては動きませんでした。見本ファイルの内容は動きました。複写方法に問題があったようです。交換可能媒体情報が取得可能になりました。 システムディレクトリ名は [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup] より、作業ディレクトリ名は [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\VolumeCaches\Temporary files] より取得可能のようです(レジストリから読むルーチンを作成)。 デバイス名と媒体種別に関する内容は [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup] より最終ドライブ名が GetDriveType(strRootPathName$) より関係情報が取得できました。こちらはDLしたファイルにコピーしたら簡単に動作しました。 >Windows98以降にはOSの一部として標準で組み込まれています。 Windows98SEの場合簡単にバッチ処理を切断できます。 マイコンピュータ コントロールパネル アプリケーションの追加と削除 内 Windowsファイル ファイルの種類の白枠内 アクセサリー 右下の 仔細 Windowsスクリプティングホスト の頭の□内レを消して 下の方の OK 戻ったところで OK これで再起動して、意図的に障害を Visual Studio インタープリターで再現できました。 Windows95では、Visual Studio を導入すると同じようなファイルが作成されます。 C:\Windows\WSCRIPT.EXE,C:\windows\command\cscript.exe, C:\windows\sysytem\内 scrrun.dll, wshom.ocx, wshext.dll ですか。 Windows95では、Visual Studioを導入するとこれらファイルが増えます。JAVAのバージョンアップがどうのうこうのというメッセージが表示されますので、こちらが関係しているものと思われます。