C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: Windowsサービスのexeがあるフォルダを


(過去ログ 22 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■9444 / inTopicNo.1)  Windowsサービスのexeがあるフォルダを判断したい
  
□投稿者/ nbmyou (37回)-(2007/10/26(Fri) 17:30:40)

分類:[.NET 全般] 

当掲示板にはたびたびお世話になっております。
初心者のnbmyouと申します。

現在、VS.net2005のC#で、フォルダ監視のWindowsサービスを作成しています。
作成したWindowsサービスのexeやdllがあるフォルダに、XMLの設定ファイルを置き、
このファイルでWindowsサービスの設定(監視するフォルダなど)が行えるようにしたいと思っています。

そこで質問なのですが、
exeやdllがあるフォルダを、プログラムから調べるためには
どうすればいいのでしょうか?
検討がつかずにおりますので、調べ方だけでもありがたいので、
何か情報を教えていただけませんでしょうか?

お手数ですが、よろしくお願いいたします。
引用返信 編集キー/
■9445 / inTopicNo.2)  Re[1]: Windowsサービスのexeがあるフォルダを判断したい
□投稿者/ ぽぴ王子 (280回)-(2007/10/26(Fri) 17:50:23)
ぽぴ王子 さんの Web サイト
No9444 (nbmyou さん) に返信

サービスで使えるのかどうかはわかりませんが

Application.StartupPath プロパティ

とか。
引用返信 編集キー/
■9447 / inTopicNo.3)  Re[1]: Windowsサービスのexeがあるフォルダを判断したい
□投稿者/ Jitta on the way (30回)-(2007/10/26(Fri) 18:56:01)
No9444 (nbmyou さん) に返信
> 当掲示板にはたびたびお世話になっております。
> 初心者のnbmyouと申します。
>
> 現在、VS.net2005のC#で、フォルダ監視のWindowsサービスを作成しています。
> 作成したWindowsサービスのexeやdllがあるフォルダに、XMLの設定ファイルを置き、
> このファイルでWindowsサービスの設定(監視するフォルダなど)が行えるようにしたいと思っています。
>
> そこで質問なのですが、
> exeやdllがあるフォルダを、プログラムから調べるためには
> どうすればいいのでしょうか?
> 検討がつかずにおりますので、調べ方だけでもありがたいので、
> 何か情報を教えていただけませんでしょうか?
>
> お手数ですが、よろしくお願いいたします。

Platform API で、GetCurrentPath とかあったような?

アセンブリに問い合わせれば、知っていそうな?
引用返信 編集キー/
■9449 / inTopicNo.4)  Re[2]: Windowsサービスのexeがあるフォルダを
□投稿者/ いしだ (61回)-(2007/10/26(Fri) 19:36:36)
2007/10/26(Fri) 19:37:39 編集(投稿者)

投稿場所間違えました。
失礼しました。
引用返信 編集キー/
■9450 / inTopicNo.5)  Re[1]: Windowsサービスのexeがあるフォルダを
□投稿者/ いしだ (62回)-(2007/10/26(Fri) 19:37:56)
2007/10/26(Fri) 19:41:34 編集(投稿者)

System.AppDomain.CurrentDomain.BaseDirectory

これでもいけるんじゃないでしょうか。
引用返信 編集キー/
■9451 / inTopicNo.6)  Re[2]: Windowsサービスのexeがあるフォルダを判断したい
□投稿者/ 渋木宏明(ひどり) (501回)-(2007/10/26(Fri) 23:00:30)
渋木宏明(ひどり) さんの Web サイト
> Platform API で、GetCurrentPath とかあったような?

いやいやいやいや、「カレントディレクトリ」は「実行ファイルの配置されたディレクトリ」と同じである保証はありませんよ。

しかも、サービスの場合はログオンすらしてない状態で実行されるので、「カレントディレクトリ」は常に Windows フォルダ辺りに設定されていたような気が。

> アセンブリに問い合わせれば、知っていそうな?

の方が確実デス。

引用返信 編集キー/
■9453 / inTopicNo.7)  Re[3]: Windowsサービスのexeがあるフォルダを判断したい
□投稿者/ nbmyou (38回)-(2007/10/27(Sat) 07:34:35)
みなさん、回答ありがとうございます。

カレントディレクトリは、取得してみるとwindows\systemでした。

アセンブリに問い合わせるということ自体、どういうことなのか、
まだ理解できていませんが、調べながらやってみます。
引用返信 編集キー/
■9454 / inTopicNo.8)  Re[2]: Windowsサービスのexeがあるフォルダを
□投稿者/ Tom Yama (13回)-(2007/10/27(Sat) 11:03:39)
WindowsAPI でよければ、GetModuleFileName() で、取得できます。
引用返信 編集キー/
■9455 / inTopicNo.9)  Re[3]: Windowsサービスのexeがあるフォルダを
□投稿者/ 渋木宏明(ひどり) (502回)-(2007/10/27(Sat) 14:40:44)
渋木宏明(ひどり) さんの Web サイト
> WindowsAPI でよければ、GetModuleFileName() で、取得できます。

.NET で↑に相当する操作が

>アセンブリに問い合わせる

です。

Windows サービスの場合 GetModuleFileName(0, xxx) でサービスの .exe 名ってちゃんと取れましたっけ?

ファイル形式は .exe であっても、Windows サービスはサービスコントロールマネージャから特殊な手順で起動されるはずなので、駄目ぽな気が。

引用返信 編集キー/
■9456 / inTopicNo.10)  Re[4]: Windowsサービスのexeがあるフォルダを
□投稿者/ Tom Yama (14回)-(2007/10/27(Sat) 15:30:05)
No9455 (渋木宏明(ひどり) さん) に返信
> Windows サービスの場合 GetModuleFileName(0, xxx) でサービスの .exe 名ってちゃんと取れましたっけ?
>
> ファイル形式は .exe であっても、Windows サービスはサービスコントロールマネージャから特殊な手順で起動されるはずなので、駄目ぽな気が。
あっ、そうなんですか?
サービスのことは、全然、知りません。ので、ダメだったら、ごめんなさいです。
引用返信 編集キー/
■9457 / inTopicNo.11)  Re[5]: Windowsサービスのexeがあるフォルダを
□投稿者/ はつね (312回)-(2007/10/27(Sat) 15:46:47)
はつね さんの Web サイト
ちょっと前に作成したWindowsサービスでサービスとして起動するアセンブリと同じフォルダにあるファイルを読んでいるのですが、そのときは次のようにして取得していました(VB2005)。

Dim fileName As String = String.Concat(My.Application.Info.DirectoryPath, "\hogehoge.txt"

参考ドキュメント→http://msdn2.microsoft.com/ja-jp/library/6whasz3x(vs.80).aspx

引用返信 編集キー/
■9498 / inTopicNo.12)  Re[6]: Windowsサービスのexeがあるフォルダを
□投稿者/ シャノン (217回)-(2007/10/29(Mon) 10:19:40)
No9457 (はつね さん) に返信
サービスの設定は
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
に置くものだと思ってました。

…権限的にはレジストリでもファイルでも似たようなもんでしょうし。
引用返信 編集キー/
■9504 / inTopicNo.13)  Re[6]: Windowsサービスのexeがあるフォルダを
□投稿者/ nbmyou (39回)-(2007/10/29(Mon) 13:10:23)
2007/10/29(Mon) 13:16:07 編集(投稿者)
No9457 (はつね さん) に返信
 > Dim fileName As String = String.Concat(My.Application.Info.DirectoryPath, "\hogehoge.txt"
> 
> 参考ドキュメント→http://msdn2.microsoft.com/ja-jp/library/6whasz3x(vs.80).aspx

情報ありがとうございます。

当方C#でのコーディングのため、

[プロジェクト]→[参照の追加]で、[Microsoft.VisualBasic]を設定し、
+++++++++++++++++++++++++++
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase MyApp 
        = new Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase();
string configPath = Path.Conbine(MyApp.Info.DirectoyPath, "hogehoge.txt");
+++++++++++++++++++++++++++
上記コードで思い通りのパスが取得できました。

どうもありがとうございました!

引用返信 編集キー/
■9505 / inTopicNo.14)  Re[7]: Windowsサービスのexeがあるフォルダを
□投稿者/ nbmyou (40回)-(2007/10/29(Mon) 13:15:40)
2007/10/30(Tue) 14:52:52 編集(投稿者)
2007/10/29(Mon) 13:17:47 編集(投稿者)

No9498 (シャノン さん) に返信

> サービスの設定は
> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
> に置くものだと思ってました。
>
> …権限的にはレジストリでもファイルでも似たようなもんでしょうし。

情報ありがとうございます。

サービスの設定は、上記のレジストリに置くことが推奨されていたりするのでしょうか。
そのような情報に疎いもので・・・。

お手数ですが、教えていただけると大変勉強になり助かります。
よろしくお願いします。

(今回、サービスの設定をユーザが変更する必要があり、
ただし設定変更用のUIを用意しないため、xmlファイルとしてみました)


※(10/30 とりあえず解決済みにいたしました)
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -