WindowsXP Delphi7 でプログラムを作っています。
プログラムの内容は
スタートアップで登録したDelphi7で作ったプログラムを起動し、
Application.Run の前で Dll をロードしています。
PC起動時にパスワードの入力画面を表示する場合は
パスワード入力後、WindowsXPが起動し、
スタートアップからプログラムが起動し、
DLLが正常にダウンロードでき、プログラムは実行できます。
電源オンするだけでこの処理をするために
オートログインで起動できるようにしたのですが、
LoadLibraly で Dll を読込むところでエラーが発生します。
原因は何なのでしょうか?
また、プログラムで対策できるのでしょうか?
以上よろしくお願いします。
ネットワークに使わないシステムなので、
オートログインを設定しました。
いろいろ試してみました。
ロードライブラリを行う前に5秒待ってやる[Sleep(5000)]
を行うとロードが出来ました。
ということで、現在は適当に5秒としていますが、
Windows が完全に起動しているかどうかを判断するチェックを
してから起動後にロードライブラリすればよいのではないかと
思うのですが、その方法ってあるのでしょうか?
教えてください。
よろしくお願いします。
解決策では無いですが、ウイルスセキュリティソフトを入れてませんか?
例えばNorton AntiVirusとか・・・
私はNorton AntiVirus 2008ではまりました。
InterBaseのサービスが中々起動しませんでした。
Norton に聞いたら、「ウイルスチェックをするので時間がかかります」
と言われました。もしかしたらDLLも???
msconfig でスタートアップやサービスを外し、チェックしてみる価値は
あるかと思います。
>ネットワークに使わないシステムなので、
セキュリティソフト・・・関係無いかもしれませんね。スマソ
どうもです。
確かめたわけではありませんが、
問題となっているのはDLL内部で使用している
ドライバーが起動するまでに本プログラムが起動し、
ロードライブラリが呼び出されるのではないかと思います。
このためロードライブラリを呼び出す前に Sleep 等で
ウェイトを入れれば正常に動作するのだと思います。
そこで、適当なウェイト時間を入れるのではなく
WindowsXP の OS で 起動完了を確認して
起動完了後に本プログラムを起動する方法は無いのでしょうか?
よろしくお願いします。
>そこで、適当なウェイト時間を入れるのではなく
原因がご推察のとおりなら、いずれにしても待つ必要がありそうですね。
ただ、どのくらい待てばいいのかわかりませんよね。それが気持ち悪いと。
LoadLibrary は失敗するとゼロを返すことを利用して、Sleep(100) ぐらいを
挟んだ while ループで待てばいいんじゃないでしょうか。
ツイート | ![]() |