ログインのスタートアップで起動したプログラムからDLLをロードするには?


ギャバ  2008-06-26 01:54:51  No: 31065

WindowsXP  Delphi7  でプログラムを作っています。
プログラムの内容は
スタートアップで登録したDelphi7で作ったプログラムを起動し、
Application.Run の前で Dll をロードしています。

PC起動時にパスワードの入力画面を表示する場合は
パスワード入力後、WindowsXPが起動し、
スタートアップからプログラムが起動し、
DLLが正常にダウンロードでき、プログラムは実行できます。

電源オンするだけでこの処理をするために
オートログインで起動できるようにしたのですが、
LoadLibraly で Dll を読込むところでエラーが発生します。

原因は何なのでしょうか?
また、プログラムで対策できるのでしょうか?

以上よろしくお願いします。

ネットワークに使わないシステムなので、
オートログインを設定しました。


ギャバ  2008-06-26 02:40:32  No: 31066

いろいろ試してみました。

ロードライブラリを行う前に5秒待ってやる[Sleep(5000)]
を行うとロードが出来ました。
ということで、現在は適当に5秒としていますが、
Windows が完全に起動しているかどうかを判断するチェックを
してから起動後にロードライブラリすればよいのではないかと
思うのですが、その方法ってあるのでしょうか?
教えてください。
よろしくお願いします。


cocomo  2008-06-26 08:28:17  No: 31067

解決策では無いですが、ウイルスセキュリティソフトを入れてませんか?
例えばNorton AntiVirusとか・・・
私はNorton AntiVirus 2008ではまりました。
InterBaseのサービスが中々起動しませんでした。
Norton  に聞いたら、「ウイルスチェックをするので時間がかかります」
と言われました。もしかしたらDLLも???
msconfig でスタートアップやサービスを外し、チェックしてみる価値は
あるかと思います。
>ネットワークに使わないシステムなので、
セキュリティソフト・・・関係無いかもしれませんね。スマソ


ギャバ  2008-06-26 17:03:38  No: 31068

どうもです。
確かめたわけではありませんが、
問題となっているのはDLL内部で使用している
ドライバーが起動するまでに本プログラムが起動し、
ロードライブラリが呼び出されるのではないかと思います。
このためロードライブラリを呼び出す前に Sleep 等で
ウェイトを入れれば正常に動作するのだと思います。
そこで、適当なウェイト時間を入れるのではなく
WindowsXP の OS で  起動完了を確認して
起動完了後に本プログラムを起動する方法は無いのでしょうか?
よろしくお願いします。


junki  URL  2008-06-26 19:53:46  No: 31069

>そこで、適当なウェイト時間を入れるのではなく

原因がご推察のとおりなら、いずれにしても待つ必要がありそうですね。
ただ、どのくらい待てばいいのかわかりませんよね。それが気持ち悪いと。

LoadLibrary は失敗するとゼロを返すことを利用して、Sleep(100) ぐらいを
挟んだ while ループで待てばいいんじゃないでしょうか。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加