DOBON.NET DOBON.NETプログラミング掲示板過去ログ

OS起動時のプログラム実行について

環境/言語:[vb.net]
分類:[.NET]

いつも参考にさせていただいております。

OS起動時のプログラム実行について質問です。
http://dobon.net/vb/dotnet/system/osstartuprun.html
を参考にさせていただいているのですが、使い方がいまいちよくわかりません。

「レジストリのRunキーに書き込む」というのは
レジストリエディタを起動し
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
のRunの中に起動させたいプログラム名.exeを作成し、
起動させたいプログラムのFormにOS起動時に実行されるようにするためのコードを入力する。

という考え方で合ってますでしょうか?
> OS起動時のプログラム実行について質問です。
> http://dobon.net/vb/dotnet/system/osstartuprun.html
> を参考にさせていただいているのですが、使い方がいまいちよくわかりません。

例えば、あるプログラムを作成しました。(プログラムAとする)
このプログラムAをOS起動時に実行したければ、

「レジストリエディタを起動し
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
のRunの中にプログラムAのフルパスの値を作成する」

という作業を行います。プログラミングは必要ありません。

> http://dobon.net/vb/dotnet/system/osstartuprun.html

このサンプルは「レジストリエディタを〜作成する」の一連の手作業の
変わりにプログラミングで同じことをしようとしているものです。
■No21275に返信(よねKENさんの記事)
よねKENさま
返信ありがとうございます。

参考にしていたコードはレジストリに書き込むためのコードだったんですね。
勉強になります。


Public Shared Sub SetCurrentVersionRun()
Dim regkey As Microsoft.Win32.RegistryKey = _
Microsoft.Win32.Registry.CurrentUser.OpenSubKey( _
"Software\Microsoft\Windows\CurrentVersion\Run", True)
regkey.SetValue(Application.ProductName, Application.ExecutablePath)
regkey.Close()
End Sub
上記コードの使い方の使い方について質問なんですが、

regkey.SetValue(Application.ProductName, Application.ExecutablePath)
のProductNameに名前、ExecutablePathに起動したいプログラムの場所
を入力で合ってますでしょうか?
上記の通りに入力しても起動時に自動実行されません…

例えば、
実行するプログラム名…a.exe
プログラムの場所………C:\aaa\a.exe
となる場合はregkey.SetValue(Application.a.exe, Application.C:\aaa\a.exe)
でいいのでしょうか?

また、デバッグではレジストリに書き込まれないのでしょうか?
> Public Shared Sub SetCurrentVersionRun()
> Dim regkey As Microsoft.Win32.RegistryKey = _
> Microsoft.Win32.Registry.CurrentUser.OpenSubKey( _
> "Software\Microsoft\Windows\CurrentVersion\Run", True)
> regkey.SetValue(Application.ProductName, Application.ExecutablePath)
> regkey.Close()
> End Sub
> 上記コードの使い方の使い方について質問なんですが、

:中略

> 例えば、
> 実行するプログラム名…a.exe
> プログラムの場所………C:\aaa\a.exe
> となる場合はregkey.SetValue(Application.a.exe, Application.C:\aaa\a.exe)
> でいいのでしょうか?

それはコンパイルエラーになりませんか?

実行するプログラムがプログラムA、SetCurrentVersionRunメソッドのコードを実装しているプログラムをプログラムBとするとその部分は、

regkey.SetValue("a.exe", "C:\aaa\a.exe")

のように書くのが正しいと思います。
そして、そのプログラムBの中で、SetCurrentVersionRunメソッドを呼び出してください。

ただ、前回の投稿でも書きましたが、起動時に実行されるようにしたいだけなら、
プログラミングをする必要はありません。
実験プログラムとしてはこの書き方で問題ありませんが、
実際に運用するプログラムとして考えると問題がありますので、
上記はあくまでサンプルです。

> また、デバッグではレジストリに書き込まれないのでしょうか?

レジストリエディタで手動では書き込めているのであれば、
デバッグ時だからレジストリ書き込まれないということはたぶんないと思います。
■No21287に返信(よねKENさんの記事)
よねKEN様
ご返信ありがとうございます。
お返事遅れまして申し訳ございません。

> そして、そのプログラムBの中で、SetCurrentVersionRunメソッドを呼び出してください。
メソッドを呼び出すとは、
具体的にはどのようなことなのでしょうか?

ご指導いただけましたら幸いです。
>>そして、そのプログラムBの中で、SetCurrentVersionRunメソッドを呼び出してください。
> メソッドを呼び出すとは、
> 具体的にはどのようなことなのでしょうか?

どのようなもこのようなも無いと思いますが…
単純に、プログラムAをレジストリに登録する用の、SetCurrentVersionRunメソッドを実装したプログラム(プログラムB)を新しく作ってね、って話だと思うんですけど。
■No21311に返信(かさのばさんの記事)
かさのば様
ご返信ありがとうございます。

一応起動しました。
しかし、データベース(アクセス)が見つからないというエラーが表示されます。
そのあとでプログラムが起動します。
データベースを表示するためのデータグリッドには何穂表示されていない状態です。

データベースの場所も指定が必要なのでしょうか?
よろしくお願いします。
連続で申し訳ありません。
エラーにはファイル'C:\Documents and Settings\user\データベース.mdb'が見つかりませんでした。
と出ます。

データベースを上記の場所に置くときちんと表示されます。

データベースの場所を'C:\Documents and Settings\user\データベース.mdb'から
別の場所に指定したいのですが、いい方法をご存知の方いましたらよろしくお願いします。
■No21325に返信(りぃえぃさんの記事)
> 一応起動しました。
> しかし、データベース(アクセス)が見つからないというエラーが表示されます。

データベースファイルに相対パスでアクセスしているなら、カレントディレクトリを要チェックですね。
■No21328に返信(りぃえぃさんの記事)
> データベースの場所を'C:\Documents and Settings\user\データベース.mdb'から
> 別の場所に指定したいのですが、いい方法をご存知の方いましたらよろしくお願いします。

mdbファイルにフルパスでアクセスするのが一番です。

exeファイルからの相対パスをフルパスに変換するには、

実行ファイルのパスを取得する
http://dobon.net/vb/dotnet/vb6/apppath.html

相対パスから絶対パスを取得する
http://dobon.net/vb/dotnet/file/getabsolutepath.html

が参考になると思います。
シャノン様、かさのば様、よねKEN様

皆様のおかげで無事起動させることができました。
的確なアドバイスありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板