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

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

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

Re[18]: あるプロセスからForm起動後について


(過去ログ 77 を表示中)

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

■45678 / inTopicNo.1)  あるプロセスからForm起動後について
  
□投稿者/ alvin (7回)-(2010/01/18(Mon) 19:39:12)

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

2010/01/18(Mon) 19:40:00 編集(投稿者)

いつもお世話になっております!
早速ですが、質問させていただきます。

開発環境:VS2008、VISTA

現象:
1.メニュープロセスから起動したいプロセスA(EXE形式のWINDOWSアプリ)を選択し、起動します。
2.プロセスAは起動されるんですが、2秒ぐらい経つと、アクティブ状態から非アクティブ状態になり、
WINDOWSのタスクバー上のプロセスAのとこはオレンジ色で光ります。
3.2の現象を解決するために、プロセスAのプロジェクトのプロパティを開き、「アプリケーション」タブを選択し、
「アプリケーションフレームワークを有効にする」のチェックを外しました。
4.3をやったときに、「Xp Visualスタイルを有効にする」が無効になり、プロセスAのスタイルが変わってしまいます。

上記の現象で、プロセスAを起動した時にアクティブ状態を維持する方法はありますか?
もしくは、3を採用したときに、スタイルが変わらない方法(Application.EnableVisualStyles()をどこにかけは一番適切?)
はないでしょうか?


以上、皆様よろしくお願い致します。

引用返信 編集キー/
■45689 / inTopicNo.2)  Re[1]: あるプロセスからForm起動後について
□投稿者/ やじゅ (1457回)-(2010/01/18(Mon) 22:30:38)
やじゅ さんの Web サイト
No45678 (alvin さん) に返信
> 1.メニュープロセスから起動したいプロセスA(EXE形式のWINDOWSアプリ)を選択し、起動します。
> 2.プロセスAは起動されるんですが、2秒ぐらい経つと、アクティブ状態から非アクティブ状態になり、

その後にアクティブ状態になるのは、メニュープロセスですか?
プロセスAを起動する部分のプログラムはどうなっています?

引用返信 編集キー/
■45693 / inTopicNo.3)  Re[2]: あるプロセスからForm起動後について
□投稿者/ alvin (10回)-(2010/01/18(Mon) 23:37:37)
No45689 (やじゅ さん) に返信
> ■No45678 (alvin さん) に返信
>>1.メニュープロセスから起動したいプロセスA(EXE形式のWINDOWSアプリ)を選択し、起動します。
>>2.プロセスAは起動されるんですが、2秒ぐらい経つと、アクティブ状態から非アクティブ状態になり、
>
> その後にアクティブ状態になるのは、メニュープロセスですか?
> プロセスAを起動する部分のプログラムはどうなっています?
>
違うと思います。(はっきりは明日確認してまた返事しますが・・)

引用返信 編集キー/
■45699 / inTopicNo.4)  Re[1]: あるプロセスからForm起動後について
□投稿者/ はつね (1164回)-(2010/01/19(Tue) 02:10:09)
はつね さんの Web サイト
No45678 (alvin さん) に返信
> 1.メニュープロセスから起動したいプロセスA(EXE形式のWINDOWSアプリ)を選択し、起動します。
> 2.プロセスAは起動されるんですが、2秒ぐらい経つと、アクティブ状態から非アクティブ状態になり、

同じような起動方法のプログラム構造のシステムがあってVistaで確認してみましたが、アプリケーション
フレームワークを有効にしたままでも、非アクティブ状態になりませんでした。
プロセスAに相当するプログラムのLoadイベント、Shownイベントなどに記述したコードが悪さしている
可能性はありませんか?
もしくはタイマーイベントなどで自動的に発生するイベントの中のコードとかも。

プロセスAで表示している画面はモーダル?モードレス?


引用返信 編集キー/
■45729 / inTopicNo.5)  Re[2]: あるプロセスからForm起動後について
□投稿者/ alvin (11回)-(2010/01/19(Tue) 13:01:43)
No45699 (はつね さん) に返信
> ■No45678 (alvin さん) に返信
>>1.メニュープロセスから起動したいプロセスA(EXE形式のWINDOWSアプリ)を選択し、起動します。
>>2.プロセスAは起動されるんですが、2秒ぐらい経つと、アクティブ状態から非アクティブ状態になり、
>
> 同じような起動方法のプログラム構造のシステムがあってVistaで確認してみましたが、アプリケーション
> フレームワークを有効にしたままでも、非アクティブ状態になりませんでした。
> プロセスAに相当するプログラムのLoadイベント、Shownイベントなどに記述したコードが悪さしている
> 可能性はありませんか?
> もしくはタイマーイベントなどで自動的に発生するイベントの中のコードとかも。
>
> プロセスAで表示している画面はモーダル?モードレス?
>
>
プロセスAのLOADイベント等を削除しても上記の現象はあります。
また、プロセスAはEXEファイルであるのでメニューとは別プロセスになり、モーダル、モードレスの概念はありません。

引用返信 編集キー/
■45730 / inTopicNo.6)  Re[3]: あるプロセスからForm起動後について
□投稿者/ Asell (2回)-(2010/01/19(Tue) 13:24:53)
No45729 (alvin さん) に返信

提示されている情報が少ないので、なんとも言えないですが、
原因と思われる要因

1.プロセスAのLoad,Show,Active等のイベントに自分自身(プロセスA)を
非アクティブ状態するコードが書かれている

2.メニュープロセスでプロセスAを起動した後に、自分自身(メニュープロセス)を
アクティブ状態にするコードが書かれている

多分、どちらかではないでしょうか?

引用返信 編集キー/
■45734 / inTopicNo.7)  Re[4]: あるプロセスからForm起動後について
□投稿者/ alvin (12回)-(2010/01/19(Tue) 14:07:51)
2010/01/19(Tue) 14:25:43 編集(投稿者)
2010/01/19(Tue) 14:08:13 編集(投稿者)

No45730 (Asell さん) に返信
> ■No45729 (alvin さん) に返信
>
> 提示されている情報が少ないので、なんとも言えないですが、
> 原因と思われる要因
>
> 1.プロセスAのLoad,Show,Active等のイベントに自分自身(プロセスA)を
> 非アクティブ状態するコードが書かれている
>
> 2.メニュープロセスでプロセスAを起動した後に、自分自身(メニュープロセス)を
> アクティブ状態にするコードが書かれている
>
> 多分、どちらかではないでしょうか?
>
1,2とも違うような気がします。
1の場合、LOADイベント等全部削除しても現象が変わりません。
2の場合、現在大きく二つの機能があり、プロセスAの場合のみ上記現象があります。



メニューから起動するプロセスA、プロセスBがあるとします。
プロセスAは「アプリケーションフレームワークを有効にする」にチェックをいれて、
スタートアップフォームがフォームクラスになっています。

プロセスBは「アプリケーションフレームワークを有効にする」のチェックをはずし、
スタートアップオブジェクトは、独自のクラスで、クラスのなかでApplication.Run(New form2)としています。

問題となってるのは、プロセスAだけです。
解決方法としては、「アプリケーションフレームワークを有効にする」のチェックを外せば、解決できますが、
XP Visualスタイルが無効になり、画面にスタイルが変わってしまいます。


追加:
プロセスBに「アプリケーションフレームワークを有効にする」にチェックを入れたら、同じ現象が起きます。
「アプリケーションフレームワークを有効にする」にチェックを入れると、強制的にスタートアップオブジェクトはfrom2に変更されます。

引用返信 編集キー/
■45764 / inTopicNo.8)  Re[5]: あるプロセスからForm起動後について
□投稿者/ Jitta on the way (509回)-(2010/01/19(Tue) 18:30:48)
No45734 (alvin さん) に返信

2秒後に非アクティブになる、というのが、異常な動作です。先ずは、その様なコードがないか、洗い出すのが先でしょう。例えば、プロセスAに新しいフォームを追加して、新しいフォームをスタートアップ フォームにします。それでも同じ現象が発生するでしょうか。

タスクバー内で点滅するのは、非アクティブな時に通知するべき情報が出来たときです。何らかの情報を通知しようとしていると思われますが、それについては、何か思い当たりますか?
引用返信 編集キー/
■45765 / inTopicNo.9)  Re[6]: あるプロセスからForm起動後について
□投稿者/ alvin (14回)-(2010/01/19(Tue) 18:48:09)
No45764 (Jitta on the way さん) に返信
> ■No45734 (alvin さん) に返信
>
> 2秒後に非アクティブになる、というのが、異常な動作です。先ずは、その様なコードがないか、洗い出すのが先でしょう。例えば、プロセスAに新しいフォームを追加して、新しいフォームをスタートアップ フォームにします。それでも同じ現象が発生するでしょうか。
>
> タスクバー内で点滅するのは、非アクティブな時に通知するべき情報が出来たときです。何らかの情報を通知しようとしていると思われますが、それについては、何か思い当たりますか?


プロセスAに新しいフォームを追加して、新しいフォームをスタートアップ フォームにしても同じ現象です。
なのでメニューからの起動方法に問題がありそうですが・・・

「アプリケーションフレームワークを有効にする」のチェックを外せば解決できるんですが、これに伴う問題は上に記述しています。
引用返信 編集キー/
■45767 / inTopicNo.10)  Re[7]: あるプロセスからForm起動後について
□投稿者/ 魔界の仮面弁士 (1452回)-(2010/01/19(Tue) 19:19:36)
No45765 (alvin さん) に返信
> プロセスAに新しいフォームを追加して、新しいフォームをスタートアップ フォームにしても同じ現象です。

・現在のソリューションを修正するのではなく、実験的に「Form1 があるだけの何もしないアプリA」を作ってみて、
 それを「アプリAを Process.Start で実行するだけのアプリB」から呼び出した場合にも、現象が再現しますか?

・Windows アプリケーション フレームワーク プロパティの[スプラッシュ スクリーン]
 もしくは My.Application.SplashScreen を利用していますか?

・System.Threading.Thread もしくは BackgroundWorker などを用いて、
 ワーカースレッドを利用していますか?

・Vista 以外の環境(7, XP等)で実行した場合にも、同様の現象が発生しますか?

・ForegroundLockTimeout の値を変更していますか? または、変更すると結果が変わりますか?
 http://support.microsoft.com/kb/886217/ja
引用返信 編集キー/
■45770 / inTopicNo.11)  Re[8]: あるプロセスからForm起動後について
□投稿者/ alvin (16回)-(2010/01/19(Tue) 20:03:31)
2010/01/19(Tue) 20:11:04 編集(投稿者)

No45767 (魔界の仮面弁士 さん) に返信
> ■No45765 (alvin さん) に返信
>>プロセスAに新しいフォームを追加して、新しいフォームをスタートアップ フォームにしても同じ現象です。
>
> ・現在のソリューションを修正するのではなく、実験的に「Form1 があるだけの何もしないアプリA」を作ってみて、
>  それを「アプリAを Process.Start で実行するだけのアプリB」から呼び出した場合にも、現象が再現しますか?
再現します。

>
> ・Windows アプリケーション フレームワーク プロパティの[スプラッシュ スクリーン]
>  もしくは My.Application.SplashScreen を利用していますか?
スプラッシュスクリーンは利用していないです。


>
> ・System.Threading.Thread もしくは BackgroundWorker などを用いて、
>  ワーカースレッドを利用していますか?
利用していませんが。
起動までの流れは下記となります。

1.メニューから起動したいプロセスIDを構成管理というプロセスに渡します。
2.構成管理がプロセスAを起動します。
3.プロセスAが正常に起動した場合、応答を構成管理に投げます。(ソケット通信になります)
4.構成管理が応答を受信して、その応答をメニュープロセスに渡します。

>
> ・Vista 以外の環境(7, XP等)で実行した場合にも、同様の現象が発生しますか?
>
XPでも同じ現象です。


> ・ForegroundLockTimeout の値を変更していますか? または、変更すると結果が変わりますか?
>  http://support.microsoft.com/kb/886217/ja
レジストリを変更したら、再現できなくなりました。


引用返信 編集キー/
■45826 / inTopicNo.12)  Re[9]: あるプロセスからForm起動後について
□投稿者/ alvin (19回)-(2010/01/20(Wed) 16:32:11)
No45770 (alvin さん) に返信
> 2010/01/19(Tue) 20:11:04 編集(投稿者)
>
> ■No45767 (魔界の仮面弁士 さん) に返信
>>■No45765 (alvin さん) に返信
> >>プロセスAに新しいフォームを追加して、新しいフォームをスタートアップ フォームにしても同じ現象です。
>>
>>・現在のソリューションを修正するのではなく、実験的に「Form1 があるだけの何もしないアプリA」を作ってみて、
>> それを「アプリAを Process.Start で実行するだけのアプリB」から呼び出した場合にも、現象が再現しますか?
> 再現します。
>
>>
>>・Windows アプリケーション フレームワーク プロパティの[スプラッシュ スクリーン]
>> もしくは My.Application.SplashScreen を利用していますか?
> スプラッシュスクリーンは利用していないです。
>
>
>>
>>・System.Threading.Thread もしくは BackgroundWorker などを用いて、
>> ワーカースレッドを利用していますか?
> 利用していませんが。
> 起動までの流れは下記となります。
>
> 1.メニューから起動したいプロセスIDを構成管理というプロセスに渡します。
> 2.構成管理がプロセスAを起動します。
> 3.プロセスAが正常に起動した場合、応答を構成管理に投げます。(ソケット通信になります)
> 4.構成管理が応答を受信して、その応答をメニュープロセスに渡します。
>
>>
>>・Vista 以外の環境(7, XP等)で実行した場合にも、同様の現象が発生しますか?
>>
> XPでも同じ現象です。
>
>
>>・ForegroundLockTimeout の値を変更していますか? または、変更すると結果が変わりますか?
>> http://support.microsoft.com/kb/886217/ja
> レジストリを変更したら、再現できなくなりました。
>
>

魔界の仮面弁士さん
申し訳ないですが、原因は何でしょうか?
レジストリ変更は基本禁止とされているので、ほかに対策はないでしょうか?

引用返信 編集キー/
■45828 / inTopicNo.13)  Re[10]: あるプロセスからForm起動後について
□投稿者/ 魔界の仮面弁士 (1455回)-(2010/01/20(Wed) 16:58:10)
No45826 (alvin さん) に返信
> 魔界の仮面弁士さん
> 申し訳ないですが、原因は何でしょうか?

現象だけ見れば、下記の[最前面ウィンドウの扱い]の説明に似ています。
http://technet.microsoft.com/ja-jp/library/cc835597.aspx
≫ これらの条件を満たさないため、オペレーティングシステムが最前面ウィンドウを
≫ 変更しないときは、代わりにタスクバーのボタンを点滅させます。ユーザーは、
≫ これを見て、アプリケーションに「呼ばれている」ことに気づきます。ここで、
≫ そのウィンドウを選ぶかどうかは、ユーザーの気持ち次第です。

Jitta さんも、 No45764 にてこの事に触れておられたかと思います。
>> タスクバー内で点滅するのは、非アクティブな時に通知するべき情報が出来たときです。
>> 何らかの情報を通知しようとしていると思われますが、それについては、何か思い当たりますか?


ただ、その「通知」が発生してしまっている要因については、正直分かりません。他の方も再現しないようです。
アプリケーションフレームワークの話についても、今のところ関連性が思い当たりません。

プログラム側の問題かと想像していましたが、新規ソリューションによる実験コードでも
再現したという事ですから、恐らくは環境依存の問題なのだろうと思いますが…。


念のため、他のプロセスを起動している箇所のコードを見せていただけませんか?
引用返信 編集キー/
■45830 / inTopicNo.14)  Re[11]: あるプロセスからForm起動後について
□投稿者/ alvin (20回)-(2010/01/20(Wed) 17:39:27)
No45828 (魔界の仮面弁士 さん) に返信
> ■No45826 (alvin さん) に返信
>>魔界の仮面弁士さん
>>申し訳ないですが、原因は何でしょうか?
>
> 現象だけ見れば、下記の[最前面ウィンドウの扱い]の説明に似ています。
> http://technet.microsoft.com/ja-jp/library/cc835597.aspx
> ≫ これらの条件を満たさないため、オペレーティングシステムが最前面ウィンドウを
> ≫ 変更しないときは、代わりにタスクバーのボタンを点滅させます。ユーザーは、
> ≫ これを見て、アプリケーションに「呼ばれている」ことに気づきます。ここで、
> ≫ そのウィンドウを選ぶかどうかは、ユーザーの気持ち次第です。
>
> Jitta さんも、 No45764 にてこの事に触れておられたかと思います。
> >> タスクバー内で点滅するのは、非アクティブな時に通知するべき情報が出来たときです。
> >> 何らかの情報を通知しようとしていると思われますが、それについては、何か思い当たりますか?
>
>
> ただ、その「通知」が発生してしまっている要因については、正直分かりません。他の方も再現しないようです。
> アプリケーションフレームワークの話についても、今のところ関連性が思い当たりません。
>
> プログラム側の問題かと想像していましたが、新規ソリューションによる実験コードでも
> 再現したという事ですから、恐らくは環境依存の問題なのだろうと思いますが…。
>
>
> 念のため、他のプロセスを起動している箇所のコードを見せていただけませんか?

プロセスAから起動後、構成管理というプロセスに完了通知をなげて、また構成管理かメニュープロセスに起動結果を渡し、
プロセスAに対し業務開始通知を送信する等の複雑な流れになっておりまして、それらのせいかと思われます。

---------------------------------------------------------
FlashWindowEx関数を利用して、強制的に点滅を回避しました。

皆さん、ご協力ありがとうございます。
---------------------------------------------------------

解決済み
引用返信 編集キー/
■45831 / inTopicNo.15)  Re[12]: あるプロセスからForm起動後について
□投稿者/ 魔界の仮面弁士 (1456回)-(2010/01/20(Wed) 17:50:56)
No45830 (alvin さん) に返信
> プロセスAから起動後、構成管理というプロセスに完了通知をなげて、また構成管理かメニュープロセスに起動結果を渡し、
> プロセスAに対し業務開始通知を送信する等の複雑な流れになっておりまして、それらのせいかと思われます。

そういった「複雑な流れ」の部分に要因があるかどうかを切り分けるために、
既存のコードを組み込まない、Process.Start するだけの実験アプリを作って試してくださいと
示したつもりだったのですが……済みません、説明不足だったようですね。


>>・現在のソリューションを修正するのではなく、実験的に「Form1 があるだけの何もしないアプリA」を作ってみて、
>> それを「アプリAを Process.Start で実行するだけのアプリB」から呼び出した場合にも、現象が再現しますか?
> 再現します。
解決済み
引用返信 編集キー/
■45878 / inTopicNo.16)  Re[13]: あるプロセスからForm起動後について
□投稿者/ alvin (22回)-(2010/01/21(Thu) 13:02:29)
2010/01/21(Thu) 14:47:22 編集(投稿者)

No45831 (魔界の仮面弁士 さん) に返信
> ■No45830 (alvin さん) に返信
>>プロセスAから起動後、構成管理というプロセスに完了通知をなげて、また構成管理かメニュープロセスに起動結果を渡し、
>>プロセスAに対し業務開始通知を送信する等の複雑な流れになっておりまして、それらのせいかと思われます。
>
> そういった「複雑な流れ」の部分に要因があるかどうかを切り分けるために、
> 既存のコードを組み込まない、Process.Start するだけの実験アプリを作って試してくださいと
> 示したつもりだったのですが……済みません、説明不足だったようですね。
>
>
> >>・現在のソリューションを修正するのではなく、実験的に「Form1 があるだけの何もしないアプリA」を作ってみて、
> >> それを「アプリAを Process.Start で実行するだけのアプリB」から呼び出した場合にも、現象が再現しますか?
>>再現します。

他のプロセスと通信しないものであれば、再現しません。
はやり、起動後通信をやっているのは問題ありそうですね。
解決済み
引用返信 編集キー/
■45900 / inTopicNo.17)  Re[14]: あるプロセスからForm起動後について
□投稿者/ alvin (24回)-(2010/01/21(Thu) 18:05:44)
追記事項:
メニュープロセスから構成管理を通さず直接プロセスAを起動した場合、タスクバーでも点滅はありません。←OK

メニュープロセスが構成管理を通してプロセスAを起動した場合、メニュープロセスがアクティブであるのに、構成管理から起動したプロセスAがアクティブになろうとしているので点滅すると判断しました。

追加質問:
メニュープロセス自身を強制的に非アクティブにする方法はないでしょうか?
引用返信 編集キー/
■45901 / inTopicNo.18)  Re[15]: あるプロセスからForm起動後について
□投稿者/ Jitta on the way (517回)-(2010/01/21(Thu) 18:32:43)
No45900 (alvin さん) に返信
> 追記事項:
> メニュープロセスから構成管理を通さず直接プロセスAを起動した場合、タスクバーでも点滅はありません。←OK
>
> メニュープロセスが構成管理を通してプロセスAを起動した場合、メニュープロセスがアクティブであるのに、構成管理から起動したプロセスAがアクティブになろうとしているので点滅すると判断しました。
>
> 追加質問:
> メニュープロセス自身を強制的に非アクティブにする方法はないでしょうか?

だから、そこ(構成管理)で何をしているかがわからないと、何とも答えようがありません。アプリケーション フレームワークの何かと構成管理が衝突していると“思われます”が、何が、何故、衝突しているかわからなければ、解決方法も出せないです。

原因を取り除かないと、対症療法ではその対応で本当に良いのかわかりません。また、今のところ、ここを見ている人の中には、同じ症状を経験した人は書き込みしようとは思われていないようです。つまり、対症療法も出来ない状態です。
引用返信 編集キー/
■45903 / inTopicNo.19)  Re[16]: あるプロセスからForm起動後について
□投稿者/ alvin (25回)-(2010/01/21(Thu) 18:38:13)
No45901 (Jitta on the way さん) に返信
> ■No45900 (alvin さん) に返信
>>追記事項:
>>メニュープロセスから構成管理を通さず直接プロセスAを起動した場合、タスクバーでも点滅はありません。←OK
>>
>>メニュープロセスが構成管理を通してプロセスAを起動した場合、メニュープロセスがアクティブであるのに、構成管理から起動したプロセスAがアクティブになろうとしているので点滅すると判断しました。
>>
>>追加質問:
>>メニュープロセス自身を強制的に非アクティブにする方法はないでしょうか?
>
> だから、そこ(構成管理)で何をしているかがわからないと、何とも答えようがありません。アプリケーション フレームワークの何かと構成管理が衝突していると“思われます”が、何が、何故、衝突しているかわからなければ、解決方法も出せないです。
>
> 原因を取り除かないと、対症療法ではその対応で本当に良いのかわかりません。また、今のところ、ここを見ている人の中には、同じ症状を経験した人は書き込みしようとは思われていないようです。つまり、対症療法も出来ない状態です。

メニュープロセスがアクティブである状態で、構成管理がプロセスAを起動したらプロセスAもアクティブになろうとして衝突が発生し、プロセスAがタスクバーで点滅していると判定しています。

解決策として、構成管理がプロセスAを起動したあと、SetForegroundWindowを使用し、プロセスAをアクティブにすることで対応します。
解決済み
引用返信 編集キー/
■45905 / inTopicNo.20)  Re[17]: あるプロセスからForm起動後について
 
□投稿者/ Jitta on the way (519回)-(2010/01/21(Thu) 18:58:34)
関係あるかどうかわかりませんが、ふと思い出したことがあります。

Vista で変更された UX に、「どの様な状態の時、新しいプロセスをフォアグラウンドにするか」というものがあります。
XP までは、新しいプロセスは無条件でフォアグラウンドになっていました。しかしこれだと、「Hey! メモ帳にタイプしている時を考えてみろよ。そんなときに新しいダイアログが表示されて、フォーカスを奪っていくんだ。君はきっと、タイプ中にスペース バーを叩くよな?それって、フォーカスされたボタンを押すのと同じだぜ?ダイアログ メッセージが、表示されたとたん消えちまうって、わかるよな?」
というわけで、Vista では、新しいプロセスを起動したプロセスがフォーカスを持っていないと、新しいプロセスは再前面に来ず、タスクバーでブリンクして通知するよう、仕様が変更になりました。
解決済み
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -