(要望) Meryがフォルダをロックし続ける問題
-
いつも便利に使わせて頂いてます
要望があるのですが使用環境は
Windows10(22H2) 64bit
Meryベータ版 Ver 3.8.2 64bitフォルダの中にある a.txtをMeryで開くとそのフォルダが削除やリネームからロックされるのは当然のことですが、その後に新たにMeryが起動した場合にロックの問題が発生します。
フォルダでの作業後に a.txtを閉じて、フォルダも不要なので削除しようとしても、他のMeryが起動中だとフォルダがロックされっぱなしになります。
Meryをすべて終了すると、ロック解除されて削除できます。できましたら対策していただけると嬉しいです。
よろしくお願いいたします。| mac | 返信 -
ご愛用いただきありがとうございます。
これは Mery がフォルダーをロックしているわけではなく、Windows の動作によるものです。
Windows のアプリには、それぞれのプロセス (たとえば Mery.exe) ごとに 1 つの作業フォルダー (カレントディレクトリ) が割り当てられています。
ショートカットから Mery を起動している場合は、ショートカットの [プロパティ] に設定されている [作業フォルダー] が使用されます。
このフォルダーはアプリの基準となるフォルダーとして使われるため、アプリがそのフォルダーを使用している間は、削除できないことがあります。
また、エクスプローラーでテキストファイルをダブルクリックしたり、関連付けから Mery を起動した場合は、多くの場合、そのファイルがあるフォルダーが作業フォルダーになります。
この場合も、Mery (Mery.exe) がそのフォルダーを使用している間は、削除できないことがあります。
この問題を避ける方法はいくつかあります。
- Mery をショートカットから起動する
ショートカットに設定されている [作業フォルダー] が使用されるため、対象フォルダーが削除できなくなる問題を避けやすくなります。
- Mery をトレイアイコンとして常駐させる
インストーラーを使用して、Mery を Windows 起動時にトレイアイコンとして常駐させると、作業フォルダーはデフォルトのフォルダー (Mery.exe の場所) に固定されます。
この状態で関連付けからファイルを開いても、作業フォルダーが変わりにくくなります。
ちなみに、アプリ側でカレントディレクトリを強制的に固定することも技術的には可能です。
ただし、その場合はエクスプローラーが自動的に設定したカレントディレクトリを変更することになり、相対パスでファイルを開けなくなったり、ユーザーが期待していた動きと変わってしまう可能性があります。
Mery では、そのような影響を避けるため、カレントディレクトリの挙動は Windows に任せています。
どうしても必要な場合は、以下のようなマクロを使用して、作業フォルダーを別の場所に変更することもできます。
このマクロを実行するか、適当なイベントに割り当てることで、ご要望の動作を実現できるかと思います。
shell.CurrentDirectory = "C:\\Program Files\\Mery";| Kuro | 返信 -
詳細ありがとうございます。
zip版ではなくインストーラ版でトレイアイコン常駐を試してみましたが、同じ現象でした...一方、標準のnotepad,exeではロックも起こらず期待通りの動作なのですがこれはnotepad,exeが毎回別のプロセスで起動するのと関係がありますか?
Meryはどんなにファイルを開いても、プロセスは一つのみでした。| mac | 返信 -
ご返信ありがとうございます。
> zip版ではなくインストーラ版でトレイアイコン常駐を試してみましたが、同じ現象でした…
説明が少し不足していたかもしれないので、補足させてください。
トレイアイコンの常駐は、スタートアップから起動する必要があります。
具体的な手順は以下のとおりです。
- インストーラーを起動する
- インストール時に [スタートアップにショートカットを追加] をオンにする
- インストール後、Windows を再起動する
こうすることで、Windows の起動時に自動的に Mery がタスクトレイに常駐するようになります。
この場合、作業フォルダー (カレントディレクトリ) は
C:\Program Files\Meryなど、Mery のインストール先から起動されます。ただし、カレントディレクトリはエクスプローラーや別のアプリなどの影響で変わることもあるため、必ずそこに固定されるとは限りません。
> 一方、標準のnotepad,exeではロックも起こらず期待通りの動作なのですがこれはnotepad,exeが毎回別のプロセスで起動するのと関係がありますか?
はい。多くの場合、Windows 10 のメモ帳は 1 ファイルにつき 1 プロセスで起動します。(内部仕様は公開されていないため、ここは少し推測を含みます)
そのため、メモ帳を閉じるとプロセス自体が終了し、カレントディレクトリによるフォルダーのロックも解除されます。
逆に、メモ帳を閉じずに、メニューの [ファイル] → [開く] やドラッグ&ドロップで別のファイルを開いた場合は、最初のファイルは閉じられてもプロセスは終了しないため、カレントディレクトリはロックされたままになります。
> Meryはどんなにファイルを開いても、プロセスは一つのみでした。
はい。Mery は 1 プロセスで動作するアプリです。
同じタイプのエディターとしては EmEditor さんや Sublime Text がありますが、どちらもカレントディレクトリによってロックされる挙動は Mery と同様でした。
一方、秀丸エディタさんやサクラエディタさんは「1 ファイル = 1 プロセス」の動作になっており、タブモードの場合でも内部的には複数プロセスで動作しています。
そのため、カレントディレクトリによるロックが発生しにくいのではないかと思われます。
…と思って試してみたのですが、バージョンや設定にもよるかもしれませんが、私の環境ではサクラエディタさんは、フォルダーのロックが解除されませんでした。
検証内容は以下のとおりです。
- 関連付けから
aaa\aaa.txtを開く - この時点で
aaaフォルダーは削除できなくなる (これは通常の挙動です) - メインメニューから [ファイル] → [新規作成]
aaa\aaa.txtを閉じる
この時点で
aaaフォルダーを削除できるかなと思ったのですが、ロックされたままでした。内部的にカレントディレクトリを保持している可能性もありそうです。また、秀丸エディタさんには [トラブル対策] という設定があり、カレントディレクトリの挙動を変更できるようです。
最近のバージョンでは [自動] がデフォルトで、内部的にカレントディレクトリを調整しているようです。(どのタイミングで移動しているかまでは確認できませんでした)
この設定を [従来通り] にすると、サクラエディタさんに近い挙動になりました。
この挙動を見る限り、
- ファイルを開いたときのカレントディレクトリ移動は可能
- ファイルを閉じたときの移動は難しい
…という印象です。(閉じた後の移動先を特定できないためかも?)
カレントディレクトリを自動的に「いい感じの場所」に移動させる仕組みは、実装がかなり難しく、不具合の原因にもなりやすい部分です。
Mery でも、カレントディレクトリのロックについてのお問い合わせは比較的多く、過去に対策を試みたこともあります。
ただ、その結果として、意図しないカレントディレクトリ移動や相対パスの問題が発生するようになり、対応が難しくなったため、Ver 2.0.6 でこの対策は廃止し、Windows の仕様に任せる方針に変更しました。
そのため、残念ながら現状では、
- Windows 起動時のタスクトレイ常駐で、ある程度回避する
- 必要に応じてマクロで任意のタイミングにカレントディレクトリを変更する
といった方法での回避が現実的かなと思います。
| Kuro | 返信 -
検証までしていただき...ありがとうございます。
教わった通りにインストールしてみると、フォルダがロックされずにリネームも削除もできました。マクロもやり方を調べて試してみました。
CurrentDirectory.jsを作成
shell.CurrentDirectory = "C:\\Software Folder\\Mery";
イベント:ファイルを開いたとき結果、望み通りの動作が出来ました!
思い切って相談して良かったです。
以前からの悩みが消えました。この素晴らしい国産エディタを今後も使わせていただきます。
感謝です。| mac | 返信 -
ご確認いただき、ありがとうございます。
無事に設定できたとのことで、安心しました。
マクロも試していただいたんですね。望みどおりの動作になったとのことで、よかったです。
こうして結果を教えていただけると、とても参考になります。
Mery はまだまだ発展途中の部分もありますが、今後も少しずつ改善していければと思っています。
また、何かありましたら、お気軽にご相談ください。
| Kuro | 返信