開発言語:VB6SP6
OS:Window Server 2003
現在、リモートデスクトップでサーバに接続しサーバ上にあるプログラムで2重起動チェックを行おうと考えています。
起動中かどうかはWMIのWin32_Processを使用し同じ名前の物があるかチェックをしています。
ここから質問の本題ですが、
2台のクライアント端末よりリモートデスクトップにてサーバに接続し、同じプログラムを起動した時に、後から起動したプログラムが2重起動チェックにひっかかりました。
タスクマネージャのプロセス一覧を確認しても、同じプログラムは起動していませんでした。
プロセスの一覧を表示するプログラムを作成し確認すると、タスクマネージャー上では確認できなかったプログラムが存在していました。
おそらく先に起動したプログラムが表示していると思います。
この場合、プロセスの一覧はすべてのプロセス(リモートデスクトップで起動したプログラムを含む)の一覧を取得するのでしょうか?
現在、リモートデスクトップ上で起動しているプロセスの一覧を取得することはできないのでしょうか?
ご存じの方がいらっしゃいましたらご教授願います。
プロセスの一覧を表示するプログラムを作成したのは
あなたですから、あなたしかわからないでしょう。
タスクマネージャの「すべてのユーザーのプロセスを表示」はちゃんとチェックしましたか?
これをチェックしないと,同一セッション中の同一ユーザーのプロセスのみ表示されます。
WMIで一覧を取得するとき(?)に,そのような条件を付けて絞り込んでみてはどうでしょうか。
あん様
ご返答ありがとうございます。
>プロセスの一覧を表示するプログラムを作成したのは
>あなたですから、あなたしかわからないでしょう。
ご指摘のとおり、私が作成したプログラムですので私しかわからないですね。
一覧を表示するプログラムは以下になります。
なにかおかしい所があればご指摘いただけないでしょうか。
With GetObject("winmgmts:\\.\root\cimv2")
For Each Proc In .InstancesOf("Win32_Process")
Me.Text1.Text = Me.Text1.Text & Proc.Caption & vbCrLf
Next
End With
YuO様
ご返答ありがとうございます。
「すべてのユーザーのプロセスを表示」
このようなチェックボックスがあったのですね。
ご指摘のチェックボックスにチェックを入れると表示されました。
WMIで一覧を取得するときに同一セッション中の同一ユーザーで絞り込めるか調べてみます。
ご指摘ありがとうございます。
使うとすれば、この辺りかな? (未確認)
> セッション
Win32_LogonSession クラスとか。
> ユーザー
Win32_Process の GetOwner/GetOwnerSID メソッドとか。
魔界の仮面弁士様
ご返答ありがとうございます。
返信が遅くなり申し訳ありません。
>> セッション
>Win32_LogonSession クラスとか。
>> ユーザー
>Win32_Process の GetOwner/GetOwnerSID メソッドとか。
教えて頂いた情報を元に調査させていただきます。
ご指摘ありがとうございます。
>現在、リモートデスクトップ上で起動しているプロセスの一覧を取得することはできないのでしょうか?
コマンドだと
query session
と
query process
で実現できます。
あん様
たびたびのご回答ありがとうございます。
>コマンドだと
>query session
>と
>query process
>で実現できます。
このようなコマンドが用意されていたのですか。
大変参考になりました。
ありがとうございます。
なんとか、解決しました。
あん様に教えていただいた
query process
のコマンドを使用して実行内容を解析する事で実現できました。
あん様、YuO様、魔界の仮面弁士様、ありがとうございました、
大変勉強になりました。
ツイート | ![]() |