スポンサーリンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« Mirror-DTC本体等の変更を開始 | トップページ | 何とかなった感じ »

Windows10での不具合対応も

今は、Mirror-DTC Ver1.4.1の開発中で、Transporterの新規開発に続いて、既存ソフトの改良作業に入ったのだが、意外と変更量が多くなりそうだ。その理由は、昨日書いたクリップボードの問題以外に、Windows10で発生する不具合への対応もあるからだ。

Windows10で発生する不具合というのは、再起動後、最初のサインイン後には、Helperが起動しないので、ファイル転送が行えない、という問題だ。

上記の問題は、結構、大問題ではあるのだが、一旦、サインアウトしてから再度サインインすれば、問題は無くなるし、Helperが起動していない状況でも、「設定の変更」を行ってDTCServiceを起動しなおせば、起動するので、回避策はない事もない訳だ。

また、別段、ユーザーからのクレームも無かったので、この問題については放置してあったのだが、Ver1.4.1の開発にあたっては、当然の事ながら、この不具合の修正も行っておこうとした訳だ。

なので、調べてみたのだが、上記の様になってしまう原因は、Windows10の場合、最初のサインイン時に、状態変化があった旨のシステムイベントを発生させていない感じなので、そのイベントを起点として、ユーザーセッションに入った! と、認識しているDTCService的には、最初のサインイン時には、サインインされたイベントが発生していない事から、ユーザーセッション用のプログラムである所のHelperを起動していなかった訳だ。

にも関わらず、DTCServiceを再起動するとHelperは起動する訳なのだが、これは、DTCServiceの起動時には、イベントがなくても、その時のセッションの状況を確認するので、この場合には、Windows10がイベントを発生させてないくても、ユーザーセッションにいる事が判るので、Helperも起動する訳だ。

と、いう事で、コロコロと仕様が変わってきているWindows10なので、この問題が発生する様になったのは何時なのかは定かではないのだが、今現在、作者環境のWindows10は二つあって、その両方共、最新状態にしてあるのだが、上記の問題は、その両方で発生している。

なので、Ver1.4.1では、この問題を回避する改良も行うのだが、その方法は単純明快に、セッションの状況は、OSのイベントに頼らずに、ポーリングで確認する、というモノだ。

もっとも、何故、元々、こういう方式にしていなかったのか、というと、ポーリングというのは、常に、処理を行う格好になるので、PCの処理負荷が増大するからだ。

このため、ポーリングするのは、ユーザーセッションだと認識できていない場合に限り、ユーザーセッションだと認識している場合には、従来と同様にイベントによってセッション状態の変化を確認する格好にした。

なので、ボーリングによって、PCの処理負荷は、若干、増加する筈なのだが、それは、普通は、サインイン画面に限られるので、実際の所としては、全く、問題にはならない筈だ。

で、上記の対策によって、初回サインイン時にも、Helperは起動される様になったのだが、この状況で、ファイル転送を行ってみると、異常な現象が発生する場合があった。

具体的には、ファイル転送処理中に表示しているメッセージダイアログが、UACダイアログが表示されるデスクトップに表示されたりした。

その結果として、普通は操作不可になるので、ファイル転送処理を継続できなくなったりしたのだが、その原因も、多分、Windows10の初回サインイン時には、何かしらのOS側での初期化処理が抜けていて、スレッド用のデフォルトデスクトップがカレントインプットデスクトップに設定されない、というのが問題の原因だった。

なので、スレッドのデスクトップは自分で設定する様にすると、上記の問題も回避でき、初回サインイン時にも、普通にファイル転送は可能になったのだが、現行版の使い勝手の中で、気になっていたモノとしては、ファイル転送中に表示されるダイアログが他のウインドウに隠れて見えなくなる場合がある、というモノがあった。

このため、Ver1.4.1では、上記のダイアログにTopMost属性を付加する事にしたのだが、その変更自体は単純で、メッセージを表示させているAfxMessageBox関数のフラグの中にMB_TopMostを追加するだけだ。

で、上記により、大体は、ファイル転送中に表示しているメッセージダイアログも、他ウインドウに隠れる事は無くなったのだが、ドラッグ&ドロップ指定時に表示しているダイアログだけは、何故か、TopMostにはならなかった訳だ。

調べてみると、ドラッグ&ドロップするファイルが複数あったり、フォルダーだったりした場合には、このダイアログについてもTopMost属性が反映され、その後は、その属性は反映され続ける感じだったのだが、不安定な感じは否めなかった。

なので、やはり、これも権限の問題かなあ、と言う事で、メッセージダイアログの表示も、Helper経由で、ユーザーセッション内で行う格好に変更してみた所、問題は無くなった。

このため、Ver1.4.1では、ファイル転送中に表示されるメッセージダイアログは、Helperが表示する格好になるので、そのタスクバーに表示されるアイコンも、Helperのモノに変わる事になる。

で、ここまでやると、システム権限で表示するダイアログで残るのはプログレスダイアログだけなので、これについても、少し複雑になるのだが、Helperで表示する格好に変更しようか、という事にしたので、Helperの変更量は、結構なモノになるかもしれない。

ちなみに、昨日書いていたクリップボードの件についても、Helper側の処理に変更済みだ。

その結果として、DTCServiceでサーバーを起動している状況でも、Webブラウザのテキストなんかも、クリップボードに入れると、Mirror-DTC経由で転送可能になった。

と、いう事で、Ver1.4.1では、Helperは、今まで以上に、重要な役割を果たす事になる。

« Mirror-DTC本体等の変更を開始 | トップページ | 何とかなった感じ »

2019年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google