- PR -

VB6.0 常駐プログラム起動方法について

1
投稿者投稿内容
ミヨ
常連さん
会議室デビュー日: 2006/09/12
投稿数: 21
投稿日時: 2008-06-04 16:03
いつも参考にさせていただいております、ミヨと申します。

Visual Basic 6.0で、タイマー付きのプログラムを作成しました。
このプログラムを常駐させて、時間がきたら他のEXEを呼び出して実行するようになっています。
Windowsにログインしている状態で起動する分には正常に動くのですが、ログインしていない状態(システム起動時)で起動が出来ずに困っております。
OSはWindowsXP Professional SP2です。

今まで試した結果を説明させていただきます。----------------------------------------------------
1.スタートアップにショートカットを入れた

ログオンしないと起動しないので止めた。

2.タスクに作成

スケジュールで「システム起動時」と時間指定の両方を試してみた結果、タスクマネージャのプロセスには表示されているので実行はされているようだが、画面が表示されなかった。(タスクマネージャのアプリケーションとタスクバーにも表示されていない。)

3.ATコマンドで設定
コマンドプロンプトで「AT 00:00(起動したい時間) /INTERACTIVE "C:\\\\TEST.EXE"」と入力してタスクに追加

画面は表示されたが、Form_Load の時点でオラクルに接続しているのでプロトコル・アダプタ・エラーが発生した。

タスクの詳細設定の「ATサービスのアカウントの構成」でアカウントをAdministratorsに設定(プロトコル・アダプタ・エラーは発生しなくなった)

http://support.microsoft.com/kb/402138/ja
上記ページの「1.デスクトップとの対話を行う GUI プログラムの実行方法」に従って
・サービスのスタートアップアカツントを「システムアカウント」に設定する。
・「デスクトップとの対話をサービスに許可」をチェックする。
Task Scheduler を上記2点と同様に変更した。

ログイン状態でATコマンドを実行すると正常に動作する。
ログインしていない状態(システム起動時)では、実行されて画面も表示されているようだが、表示しているフォームの画面輪郭はあるが中が真っ黒で何も見えない。
ボタンがある辺りをクリックしてみると、別フォームが開く(これも真っ黒で見えない)ので動作はしているよう。
------------------------------------------------------------------------------------------
Form_Load の時点でオラクルに接続しているのでそれが原因かと思い、実行直後にメッセージボックスを表示させてOKが返されたらForm.Showしてオラクル接続するように変更してみたのですが、メッセージボックスも真っ黒もしくは壁紙が写りこんでいる状態で結果は同じでした。

これからどこを調べていけばいいのか、何か見落としがあるのか、全く分からなくなってしまいました。
VB6.0の質問なのでスレッドが違うかもしれないと思ったのですが、一番こちらが近いかと思い書き込ませていただきました。
何卒ご教授宜しくお願いいたします。
ひでたつ
常連さん
会議室デビュー日: 2002/08/09
投稿数: 28
お住まい・勤務地: 岩手県
投稿日時: 2008-06-04 17:07
ここは参考になりませんか?

サービスからアプリケーションデスクトップへのアクセス
ミヨ
常連さん
会議室デビュー日: 2006/09/12
投稿数: 21
投稿日時: 2008-06-04 18:02
ひでたつ様

ご返答ありがとうございます。
教えていただいたページを参考に確認させていただきました。

今までTask Schedulerの「デスクトップとの対話をサービスに許可」にしかチェックを入れておりませんでしたが、TerminalServicesにも必要なのかと思いチェックを入れてみましたが結果は同じでした。
検討違いなことをしていたら申し訳ありません。
ひでたつ
常連さん
会議室デビュー日: 2002/08/09
投稿数: 28
お住まい・勤務地: 岩手県
投稿日時: 2008-06-05 08:57
ミヨさんが書かれている "Task Scheduler" と "Terminal Services" とは
「コントロール パネル」->「管理ツール」->「サービス」内での事ですか?
そうでしたら、ここの設定を変更しても何も変わりません。

ログオフ時に実行させたいのであれば、「VB6で作成したプログラム」をサービスとして
起動するようにしてみて下さい。(方法は何種類かあります)

そうすると、「サービス」の一覧に、「VB6で作成したプログラム」が表示されるようになりますので、
そこのプロパティで「デスクトップとの対話をサービスに許可」してみてはどうでしょうか?
ミヨ
常連さん
会議室デビュー日: 2006/09/12
投稿数: 21
投稿日時: 2008-06-05 11:29
ひでたつ様

ご返答ありがとうございます。

引用:

ひでたつさんの書き込み (2008-06-05 08:57) より:
ミヨさんが書かれている "Task Scheduler" と "Terminal Services" とは
「コントロール パネル」->「管理ツール」->「サービス」内での事ですか?
そうでしたら、ここの設定を変更しても何も変わりません。


ひでたつ様のおっしゃる通り、管理ツールのサービスを変更していました。
ここの設定は何の関係もなかったのですね・・・ご指摘ありがとうございます。

今の設定で1度だけATコマンドで正常に動いたものですから(再現はできませんでした)、この方法でいけると思い込んでしまっていました。
お教えいただいたように、VB6で作成したプログラムそのものをサービスとして起動する方法を探してみようと思います。
後ほど結果報告をさせていただきます。

ひでたつ様、ご丁寧に教えてくださりありがとうございました。
ミヨ
常連さん
会議室デビュー日: 2006/09/12
投稿数: 21
投稿日時: 2008-06-06 10:43
お世話になっております、ミヨと申します。
現状報告をさせていただきます。
VB6で作成したプログラムをサービスとして起動する方法を探しておりますが、まだ解決には至っておりません。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=26529&forum=7&start=0
上記スレッドで確認してみましたところ、NTSVC.OCXというのを使うらしいことは分かりました。
ここからサンプルコードをダウンロードして確認しているのですが、コードを見ても理解ができておりません。
もう少し時間をかけて見ていこうと思います。
ひでたつ
常連さん
会議室デビュー日: 2002/08/09
投稿数: 28
お住まい・勤務地: 岩手県
投稿日時: 2008-06-06 15:29
ここのサイトの sexe というソフトを使えば
普通の exe をサービスとして起動する事ができます。
ミヨ
常連さん
会議室デビュー日: 2006/09/12
投稿数: 21
投稿日時: 2008-06-06 16:42
ひでたつ様

何度もご教授くださり本当にありがとうございます。
教えていただいた sexe というソフトを使用して、無事にサービスとして起動する事ができました!
デスクトップとの対話もできております。
ですが、「ORA-12560:TNS:プロトコル・アダプタ・エラーが発生しました」となってしまいました。
調べたところオラクルはログインしてからしか接続することが出来ないらしいです。

こちらの「通常アプリケーションをサービスとして動かす方法」のkaz様のご意見を参考にオートログインして、スタートアップにショートカットを登録することにいたしました。

せっかくご教授いただいた事を活かす事ができず申し訳ありません。
ですが、今回のことはとても勉強になりましたので今後の開発に活かしたいと思います。
ひでたつ様のおかげでココまでたどり着くことができました。
今回は本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)