fiber.exe が 標準ユーザー で突然動かなくなる

148 views
Skip to first unread message

KIRIHARA Masaharu

unread,
Jan 31, 2021, 2:54:43 AM1/31/21
to mew...@googlegroups.com

桐原と申します.mew に直接関係ない話で,すみません.

当方 Windows10 にて 標準ユーザー にてログイン(ログオン?サインイン?)しています.

https://github.com/shkit/fiber/releases
からダウンロードした fiber.exe を
%emacs_dir%\libexec\emacs\27.1\x86_64-w64-mingw32\.
に置き,例えば PDF が添付されている e-mail は
To execute an external command, type ’C-c C-e’.
と表示されるので C-c C-e をすると PDFビュアー が起動していました.

ところが,ある日,何が原因なのかわかりませんが,まったく起動しなくなりました.
コマンドプロンプト (や PowerShell) 上で
fiber.exe foo.txt
などと実行しても起動しません.しかし,
管理者として実行したコマンドプロンプト (や PowerShell) 上で
同様に実行するとちゃんと起動し (この場合はメモ帳が立ち上がり),
その直後に 標準ユーザー で C-c C-e なり
コマンドプロンプト上での実行 なりをすると,ちゃんと起動します.

先に『何が原因なのかわかりませんが』と書きましたが,
おそらく (マイクロソフトから配布される) 累積更新プログラム が
インストールされたことが原因ではないか,と思っています.
(違うかもしれませんが.)


Windows の API等 を使ったプログラムをしたことがないのでよくわからないのですが,
この 管理者/標準ユーザー の挙動を考慮した fiber.exe を
作成して頂きたいのですが…. > 北口さん

# レジストリ関連(アクセス権)が原因ではないか,と当方推察しています.

## まぁ,前記のように,一度 管理者として実行 すればいい
## (ということを最近発見した) ので,最悪そうすればいいだけなのですけど….
## この解決方法を見つけるまではパニックっていました.

---
KIRIHARA, Masaharu

Shuichi KITAGUCHI

unread,
Jan 31, 2021, 6:32:35 AM1/31/21
to mew...@googlegroups.com
桐原さん、

北口です。

報告ありがとうございます。

> # レジストリ関連(アクセス権)が原因ではないか,と当方推察しています.

fiberは、レジストリに値がない場合は自動的に初期値を書き込むのですが、
その後、実行するためにレジストリを見にいくと実は書けていなくて、
何もないのでそのまま終了する、いう状況のようです。

実験してみないと原因はわからない気がするので、しばらくお待ちください...

HKEY_LOCAL_MACHINEに書いているのが悪いのだろうなと想像していますが、
今さらそこ頑張るぐらいなら、レジストリがなかったらWindowsにお任せするように
デフォルトの動作を変えた方が良いかなとも思います。
拡張子のないファイルを実行したいという状況が、今どきどれぐらいあるかですが。


--
Shuichi KITAGUCHI // k...@ysnb.net / k...@hh.iij4u.or.jp

Shuichi KITAGUCHI

unread,
Feb 1, 2021, 4:58:22 AM2/1/21
to mew...@googlegroups.com
北口です。

まだ仕様はちゃんと調べていないのですが、私の環境で再現しなくなってしまったので
状況だけ記載しておきます。

fiber.exeが作成するレジストリは、64bit OSだと、一般ユーザであれば以下で、

HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore\MACHINE\SOFTWARE\WOW6432Node\GNU\Fiber

管理者であれば以下になるようです。

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GNU\Fiber

# fiber.exeが32bitアプリなので、WOW6432Node配下にリダイレクト
# されています。

私の環境では前者が存在していたのですが、実験にと思って削除すると、
再度同じものが作成されて、問題なく動作するようになってしまいました。

というわけで、レジストリの権限が何かのタイミングでおかしくなり、
書き込めなくなっていたのが、削除して再作成することで綺麗になり
問題がなくなったのでは、と想像しています。

KIRIHARA Masaharu

unread,
Feb 1, 2021, 8:35:59 AM2/1/21
to mew...@googlegroups.com

桐原です.

私も再現できないです.

> HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore\MACHINE\SOFTWARE\WOW6432Node\GNU\Fiber
> HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\GNU\Fiber

両方のレジストリを削除して,再起動して,標準ユーザーでログインして,
上記二つとも存在しないことを確認した上で fiber.exe を実行すると問題なく動き,
同時に HKEY_CURRENT_USER\… は作成されました.
HKEY_LOCAL_MACHINE\… は(標準ユーザーなので権限がなく)作成されませんでした.

次に,
両方のレジストリを削除して,再起動して,標準ユーザーでログインして,
管理者権限で fiber.exe を実行すると同様に問題なく動き,
同時に HKEY_LOCAL_MACHINE\… は作成されました.
またレジストリエディタを 標準ユーザー で起動しても 管理者 で起動しても
HKEY_CURRENT_USER\… に作成されていないことを確認しました.

ここの状態,つまり
-- HKEY_LOCAL_MACHINE\… は存在し,
-- HKEY_CURRENT_USER\… は存在しない
状態で(ログインしている標準ユーザーのまま) fiber.exe を実行すると,
HKEY_CURRENT_USER\… は作成されませんでした.
# その後,再起動し,標準ユーザーで fiber.exe 実行しても
# HKEY_CURRENT_USER\… が作成されませんでした.

## つまり HKEY_CURRENT_USER\… がなくても HKEY_LOCAL_MACHINE\… があれば
## fiber.exe は動作するようです.


> というわけで、レジストリの権限が何かのタイミングでおかしくなり、
> 書き込めなくなっていたのが、削除して再作成することで綺麗になり
> 問題がなくなったのでは、と想像しています。

上記のようにレジストリの項目がなくても,ちゃんと作成され
実行されていることを考えると,
-- レジストリに書き込む内容を fiber.exe が持っている,と思われる
-- 通常は,もしそのレジストリのエントリーが存在しない場合は作成する
(標準ユーザーの場合は HKEY_CURRENT_USER\… に作成する)
-- しかし,何かのタイミングでそのエントリーが作成できない
と考えられます.

---
KIRIHARA, Masaharu

Shuichi KITAGUCHI

unread,
Feb 11, 2021, 12:22:43 AM2/11/21
to mew...@googlegroups.com
北口です。

桐原さんにご協力頂き色々調べていたのですが、結局、fiber.exeが書き込む
レジストリをHKEY_LOCAL_MACHINEからHKEY_CURRENT_USERに変更すること
にしました。修正したfiber.exeは、下記から取得できます。

https://github.com/shkit/fiber/releases/tag/v1.3.0

もしfiberのオプションの変更を行なっている方は、お手数ですが再度変更
をお願いします。

また不具合等ありましたら、お知らせください。

以下、参考です。

fiber.exeが32-bitアプリかつHKEY_LOCAL_MACHINEを使っているので、
互換性を保つためにregistry redirectorやらRegistry Virtualization
やらという機能が動作しているようなのですが、駄目なパターンでは
Registry Virtualizationがうまく動作せず、アクセス権のないところを
読み書きしようとして動作できていませんでした。

そして何故駄目なのかを調べていたのですが、MSの以下のドキュメントを見た
ところで挫折することにしました。

Therefore, it is important that your application does not become
dependent on the behavior of registry virtualization in the system.

互換性保つのは大変ですね...
Reply all
Reply to author
Forward
0 new messages