とある開発中のサービスアプリですが、
起動時にきちんとファイルを読み込んでるのですが、
そのファイルがドライブ内を全検索しても一向に見つからないという現象が発生しました。
不可解な現象。正直ホラーです。
実際の場所
原因は以下の通りです。
- ファイルの置き場所が違った
- その置き場所に閲覧許可がされてないと検索しても出てこない
わかってしまえばなんてことない話ですが、
サービスアプリの開発に慣れていないので結構焦りました。
サービスアプリでRoamingのフォルダを指定すると以下の場所になるようです。
C:\Windows\System32\config\systemprofile\AppData\Roaming
で、僕が必死で探してた場所は以下(こっちは間違い)
C:\Users\(ユーザー名)\AppData\Roaming
フォルダ全検索してファイルが見つからないのはsystemprofile以下に閲覧の許可が必要なためです。
背景をもう少し知りたい方は以下をどうぞ。
背景
以下の方法でサービスアプリを作成しています。
- Visual Studio で開発
- ワーカーサービスのテンプレートでIHostBuilderを用いてWindowsサービスアプリを作成
- バッチファイルでサービス登録 + 起動
- AppData/Roamingにファイルを出力
Roamingフォルダの指定方法(C#)
var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
サービスへ登録するバッチファイル
sc create DestinationBoardService binPath="%CUR_DIR%%APP_NAME%" start=auto
まとめ
ログインしなくても受け付けるサービスがユーザーのフォルダ配下で動作するわけがありません。
ちょっと考えればわかるようなものでした。
以下のような状態が重なり時間を溶かしてしまいました。
- 滅多にサービスアプリをつくらない
- ブレークポイントを使ってデバッグできない
- UIがない
- 出力されているログファイルの場所がわからない
- サービスの登録や解除が面倒くさい
サービスアプリの開発は少し苦手です。
おわり
コメントを残す