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

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

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

Re[3]: windowsサービスでのユーザー名の取得について


(過去ログ 123 を表示中)

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

■73473 / inTopicNo.1)  windowsサービスでのユーザー名の取得について
  
□投稿者/ asano (1回)-(2014/09/30(Tue) 11:44:53)

分類:[VB.NET/VB2005 以降] 

こんにちは
開発環境は、Visual Studio2010です。
言語は、visual basicです。

Windowsサービスにてプログラムを作っています。
単純なプログラムで、サービス開始時に、ログインユーザー名と時刻をSQLに書き込んでいます。
シャットダウン時にも、同じようにSQLに書き込みます。

プログラム自体は完成したのですが、サービスの実行は、ネットワークにアクセスする必要があるため、AD上に専用に作成したアカウントとしています。
本来であれば、Windowsにログインしているユーザーで良いのですが、半年に一度、パスワードを変更しているため、パスワードが変更されてサービスが起動しないのは困るので、パスワードの変更をしない専用アカウントを作成し、そのユーザーでサービスを起動しています。

ここで問題なのですが、ユーザー名を
My.User.Name
System.Environment.UserName
などで取得すると、Windowsにログインしているユーザー名ではなく、サービスを起動しているユーザー名を取得してしまいます。
SystemInformation.UserName
で取得すればいいかなと思ったのですが、Windowsサービスの開発では使えないようです・・・

いろいろ検索しましたが、良い方法が見つかりませんでした。
何か良い方法をご存じの方はいらっしゃらないでしょうか・・・
引用返信 編集キー/
■73476 / inTopicNo.2)  Re[1]: windowsサービスでのユーザー名の取得について
□投稿者/ 魔界の仮面弁士 (130回)-(2014/09/30(Tue) 13:32:33)
No73473 (asano さん) に返信
> Windowsにログインしているユーザー名ではなく、

この場合は、ログインでは無くログオンかな?


> サービスを起動しているユーザー名を取得してしまいます。

「サービスを開始した時間」を記録するのですから、それで正しい動作だと思いますよ。

サービスは「誰もデスクトップにログオンしていない状態」でも起動されますし、
ファミリーログオンやリモートデスクトップ接続時などにおいては、
同時に複数のユーザーがログオンされた状態になる可能性もありそうです。

起動時の各セッションのユーザーを列挙したいという意図ならば、
qwinsta コマンドなり query session コマンドなりの標準出力を
得るという手抜き実装はどうでしょう。
API で拾うなら、WTSEnumerateSessions あたりかな。
引用返信 編集キー/
■73478 / inTopicNo.3)  Re[2]: windowsサービスでのユーザー名の取得について
□投稿者/ asano (2回)-(2014/09/30(Tue) 16:31:07)
なるほど、ありがとうございます。
自動にしておくと、ログイン前にサービスは起動しているのだから、ログオンユーザーなんて存在しない場合や、複数ログインしている場合もあるでしょう、ということですか・・・
理解致しました。
根本的に方向性が間違っていたようなので、サービスではなくする方向で考えたいと思います。
ありがとうございました。
引用返信 編集キー/
■73479 / inTopicNo.4)  Re[3]: windowsサービスでのユーザー名の取得について
□投稿者/ asano (3回)-(2014/09/30(Tue) 16:31:36)
解決にするのを忘れていました
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -