◀一般トップへ
  • 58 ときどきiniの設定がなくなります。
    • 60 Re:ときどきiniの設定がなくなります。
      • 61 Re2:ときどきiniの設定がなくなります。
        • 62 Re3:ときどきiniの設定がなくなります。
          • 63 Re4:ときどきiniの設定がなくなります。
            • 69 バージョンチェックの不思議
              • 74 Re:バージョンチェックの不思議
            • 79 Re5:ときどきiniの設定がなくなります。
    • 80 原因が分かりました
      • 81 (補足)原因が分かりました
  • [58] ときどきiniの設定がなくなります。 あろか 2001年01月29日 23:23

    ありがたく常用しています。

    バグ報告します。
    テキストエディタで設定した項目が消えてしまうことがあります。
    まったくなくなるのではなく、数日前の状態に戻る感じです。
    「最近使ったファイル」などの内容もいっしょに古くなります。

    WindowsNT4.0を使用していて、ログオフや再起動をした後に起こりやすいようです。
    Windows98のときは気がつかないのでNTの問題なのでしょうか?
    新しいバイナリにしたときはini丸ごと作り直しているのでなかなか気付きませんでした。
    • [60] Re:ときどきiniの設定がなくなります。 げんた 2001年01月30日 09:48

      ▼ あろかさん
      > テキストエディタで設定した項目が消えてしまうことがあります。
      > まったくなくなるのではなく、数日前の状態に戻る感じです。
      > 「最近使ったファイル」などの内容もいっしょに古くなります。
      数日前って,数日に1回しかマシンを再起動しないんですか(@_@)? 正しく保存されない可能性があるというのは理解できますが,複数世代さかのぼるというのは考えにくいんですが.

      > WindowsNT4.0を使用していて、ログオフや再起動をした後に起こりやすいようです。
      > Windows98のときは気がつかないのでNTの問題なのでしょうか?
      以前も同様の指摘があってWM_CLOSEやWM_QUERYENDSESSIONの処理をチェックしたのですが,それといって変なところは見あたりませんでした.Windows終了時のWM_QUERYENDSESSIONの発行され方がNTと95/98で異なるのは知っていますが,それがどのように関係しているかは現時点ではよくわかりません.
      • [61] Re2:ときどきiniの設定がなくなります。 KENCH 2001年01月30日 11:24

        > 以前も同様の指摘があってWM_CLOSEやWM_QUERYENDSESSIONの処理をチェックしたのですが,それといって変なところは見あたりませんでした.Windows終了時のWM_QUERYENDSESSIONの発行され方がNTと95/98で異なるのは知っていますが,それがどのように関係しているかは現時点ではよくわかりません.
         想像ですが、NTで、Iniファイルがディスクトップ上に有る場合で、ユーザ毎にディスクトップが切り替わると、設定したユーザ以外でログインしたら設定が戻ったような錯覚になるやも。
        • [62] Re3:ときどきiniの設定がなくなります。 げんた 2001年01月30日 13:14

          ▼ KENCHさん
          > NTで、Iniファイルがディスクトップ上に有る場合
          Iniファイルがデスクトップ or マイコンピュータにあるということはsakura.exeもそこにあるということでは?ユーザ毎に本体をおくというのは考えにくいですが.
          • [63] Re4:ときどきiniの設定がなくなります。 じぇぷろ 2001年01月30日 15:10

            更新時に古いexeを移動だけにしてませんか?
            削除かリネームをしないと、ショートカットが気を利かせすぎて
            移動ファイルの方を起動しに行ってしまうことがあります。
            あるいは常駐したままログオフとか。常駐していると設定を
            変えてもiniを吐き出すのは常駐終了時だけです。(確か(^_^;))
            ログオフで常駐終了時に失敗しているのかもしれません。
            あるいはいくつかのバージョンをあちこちに入れてませんか?
            私はデスクトップ上に各種バージョンを取り揃えております。(^_^;)
            そのショートカットキーの行き先は?
            バージョンチェックに引っかからないマイナーチェンジの場合、
            実際には違うバージョンのものを起動しても動いてしまいます。
            多分iniの仕様が同じバージョンでは中身が違っても起動できる
            仕掛けなんでしょう。ただ、その時常駐していると、そっちの
            iniとごちゃ混ぜ(というか常駐の方?)になるようです。だから
            常駐アイコンのTipにバージョンも表示できるようにしたんです。
            • [69] バージョンチェックの不思議 じぇぷろ 2001年01月30日 19:12

              ▼ じぇぷろさん
              > バージョンチェックに引っかからないマイナーチェンジの場合、
              > 実際には違うバージョンのものを起動しても動いてしまいます。
              > 多分iniの仕様が同じバージョンでは中身が違っても起動できる
              > 仕掛けなんでしょう。

              1.2.24.0から1.2.25.1までは同時起動できます。1.2.23.0は
              持ってないので試せません。1.2.25.2ではFileVersionを1.2に
              固定したのが理由かわかりませんがiniに互換性があるにもかかわらず、
              同時起動できません。こうなるとバージョンチェックはURの3番目と
              いうわけでもなさそうです。
              • [74] Re:バージョンチェックの不思議 げんた 2001年01月30日 20:45

                内部で使っているWindows共有メモリの形式が異なるものは同時起動できないようにしてあります.この機構は昨年の10月くらいに組み込んだもので,具体的にはCShareData.cppの先頭にあるuShareDataVersion変数の値が異なるものは同時に起動できません.

                なぜこうなっているかというと,共有メモリの形式が異なるものを同時起動して使うとWindows NTごとBlue Screenになってしまうなど重大な障害がでるからです.

                表面的にはほとんど同じでもこのチェックに引っかかる場合は私が何か機能を追加しようと途中まで作りかけたままになっている可能性が高いです(^^ゞ.とりあえず変数だけ先に追加して機能部分を後で何とかしようと思ったような記憶がなきにしもあらず...
            • [79] Re5:ときどきiniの設定がなくなります。 あろか 2001年01月31日 00:10

              たくさんの回答ありがとうございます。

              こちらの状況説明が不充分でした。もうしわけありません。
              ・インストールはProgram Files¥sakuraフォルダに上書きコピーしています。
              たまに古いのを削除してからコピーすることもあります。(ゴミ箱へ「移動」も原因になるのでしょうか?)
              ・「ini消滅対策」のため、sakura.iniをときどきバックアップしており、スタートアップに”copy sakura.ini2 sakura.ini”という1行バッチをいれていました。
              (←ここではパスは省略しています。)「数日前」になるのは、これが原因でした。いらぬ疑問を誘い申し訳ありません。
              ・常駐したままでログオフやシャットダウンしています。Win98では問題ありませんでした。

              Win98とNTで終了時の挙動が異なるとの説明がありましたので半分納得致しました。が、利便性を考えると毎回常駐終了するのは面倒です。
              ソースを拝見しましたが、WM_QUERYENDSESSIONのときにはiniを保存していないようですね。
              この辺が原因なのでしょうか?(コンパイルできる環境がbccしかないので手は出してません。すみません)

              以上です。

              追伸
              ▼ じぇぷろさん
              (略)
              > バージョンチェックに引っかからないマイナーチェンジの場合、
              > 実際には違うバージョンのものを起動しても動いてしまいます。
              > 多分iniの仕様が同じバージョンでは中身が違っても起動できる
              > 仕掛けなんでしょう。ただ、その時常駐していると、そっちの
              > iniとごちゃ混ぜ(というか常駐の方?)になるようです。だから
              > 常駐アイコンのTipにバージョンも表示できるようにしたんです。
              Win98では複数のバージョンを起動するとすでにメモリにいるDLLが使われると思います。
              bccで遊んでいた頃はそうなっていました。
    • [80] 原因が分かりました げんた 2001年01月31日 01:49

      原因はWM_ENDSESSIONメッセージを処理していないことでした.

      以下引用
      The WM_ENDSESSION message is sent to an application after the system processes the results of the WM_QUERYENDSESSION message. The WM_ENDSESSION message informs the application whether the session is ending.

      A window receives this message through its WindowProc function

      ▼Parameters
      wParam: Specifies whether the session is being ended. If the session is being ended, this parameter is TRUE; otherwise, it is FALSE.

      ▼Remarks
      If the wParam parameter is TRUE, the session can end any time after all applications have returned from processing this message. Therefore, an application should perform all tasks required for termination before returning from this message.

      The application need not call the DestroyWindow or PostQuitMessage function when the session is ending.

      と言うわけで,WM_ENDSESSIONが来たときはWM_DESTROYはもとよりメッセージループも呼ばれることなく終了してしまうので,メッセージループを抜けた後に書かれている保存処理まで到達しません.
      この問題は次のバージョンで修正します.(じぇぷろさんも覚えておいてね)
      • [81] (補足)原因が分かりました げんた 2001年01月31日 09:00

        > M_ENDSESSIONが来たときは保存処理まで到達しません.
        以下はどうしてWin95/98ではうまく保存できるのかについての私の予想です.

        現在のコードではWM_QUERYENDSESSIONが来た時点で全ウィンドウを閉じて自分のウィンドウを破棄するようになっています.ですから,WM_ENDSESSIONがくる前に処理を完了できれば正常に終了します.

        WM_QUERYENDSESSIONにかかれている説明を見ると,WinNT/2000ではWM_QUERYENDSESSIONが戻った後は他のアプリとは無関係にすぐWM_ENDSESSIONがくるのに対して,Win95/98ではすべてのアプリがWM_QUERYENDSESSIONに応答した後で初めてWM_ENDSESIONの発行を開始します.

        Win95/98は他のアプリが終了処理をしている間にテキストエディタが自分で正常終了するので一見うまくいっていたように見えただけでその挙動は起動しているアプリの数に依存するのかもしれません.