2024年2月17日土曜日

Win11 mspaint.exe よ、何処?

mspaint.exe が原因で、一部のプログラムやスクリプトがコケてる可能性が ... 。
そう、Windows 10 で動いているのに、
Windows 11 では ... 駄目!。
Windows 11 を導入して、もう、随分と経つんですが、ねッ。  ;)


事の発端は、
GIMP 2.10 で 古い Script が動か無い と言う 質疑に対する Developer の回答です。
此れまた、随分と前に 係わった件なのですが、最近、新たな投稿が寄せられました。
確か、昔、動くのを確認した上で、こうしたら?、
と自分でも投稿してあったのですが、
気になって、今の Desktop PC (Win11) で試して見ると ... 。
見事に コケる じゃぁありませんか!。
原因は、別の Note PC (Win10) で導入してある アプリ実行ファイル が欠落していた事 でした。
Install して、見事、復活です。
でも、其の中で MS Paint (ペイント) も呼び出しているのですが、
其れもまたコケてるのです。


以下は、少し、プログラミング絡みの お話し になるので、
プログラムを使うだけの方々には 難解 単語意味不明 かも? ですが、
ご勘弁下さい。


さて、
ペイント は、Window 11 では、UWP 化 され、Store App 扱い になった筈です。
詰まる所、実行ファイルの格納場所が変わっているのでしたね。
共に、Script の中から、フルパスで 呼び出しているのです。
無くなったもの を呼んでも、正常に動く訳はありませんね。

因みに、別の 自作プログラム (VB.net) でも呼び出しています。
こんな感じ。

VB.net
        'Dim execName = "mspaint.exe"

        Dim p As New System.Diagnostics.Process()
        p.StartInfo.FileName = execName
        p.Start()

此方では、サーチパスで探すので動きますね。
一応、確認して見ましょうね。  所謂、環境変数。、
cmd.exe の set です。

Path=C:¥WINDOWS¥system32;C:¥WINDOWS;C:¥WINDOWS¥System32¥Wbem;
<中略>;
C:¥Users¥<User>¥AppData¥Local¥Microsoft¥WindowsApps;

となっていました。
おおッ!。  パスが通してある!(当たり前でしょ!)。

さて、
コケているのは Python による Script 。


GIMP 2.10.36 Python Console
Python 2.7.18 (default, Jul  1 2023, 20:56:56)  [GCC 13.1.0 64 bit (AMD64)]
>>>
>>> import getpass
>>> username = getpass.getuser()
>>> username
' UserA'
>>> path1= "¥"C:¥¥Windows¥¥system32¥¥mspaint.exe¥""
>>> path1
'"C:¥¥Windows¥¥system32¥¥mspaint.exe"'
>>> path2= "¥"C:¥¥Users¥¥UserA¥¥AppData¥¥Local¥¥Microsoft¥¥WindowsApps¥¥mspaint.exe¥""
>>> path2
'"C:¥¥Users¥¥UserA¥¥AppData¥¥Local¥¥Microsoft¥¥WindowsApps¥¥mspaint.exe"'
>>> path2a= "¥"C:¥¥Users¥¥" + username + "¥¥AppData¥¥Local¥¥Microsoft¥¥WindowsApps¥¥mspaint.exe¥""
>>> path2a
'"C:¥¥Users¥¥ UserA¥¥AppData¥¥Local¥¥Microsoft¥¥WindowsApps¥¥mspaint.exe"'
>>> username="Test"
>>> path2a= "¥"C:¥¥Users¥¥" + username + "¥¥AppData¥¥Local¥¥Microsoft¥¥WindowsApps¥¥mspaint.exe¥""
>>> path2a
'"C:¥¥Users¥¥Test¥¥AppData¥¥Local¥¥Microsoft¥¥WindowsApps¥¥mspaint.exe"'
>>>

実際には、こんな Code (Python) になりますね。
Version で分岐させたり、User 名 をハードコードしたりすると、
後々面倒なので、
OS 毎に 別ファイル で、
ユーザー名を自動で取り込むようにした方がベターでしょうね。
無論、お手軽に、名前部分を ハードコーディング する手もありますけれど ... 。

For Windows 10
  ["MS Paint", "¥"C:¥¥Windows¥¥system32¥¥mspaint.exe¥"", "bmp"],
For Windows 11
  import getpass
  username = getpass.getuser()
  programlist = [
  ["MS Paint", "¥"C:¥¥Users¥¥" + username + "¥¥AppData¥¥Local¥¥Microsoft¥¥WindowsApps¥¥mspaint.exe¥"", "bmp"],



一件落着!。

  Python でも サーチパス が有効か?は試していません。
  フルパスで呼んでいるのを踏襲しただけです。

  但し、GIMP も 2.10 から 3.0 が目前なのですが、
  将来、Scripts 群は 書き換え必須! なので、 今回の作業も 徒労に帰す 気がしていますけれど。
  元々、使っていなかったので、エラーに気付けなかった訳ですし。
  そして、直した今回の は 3.0 では 使えないんです ... 。
  無論、2.99 でさえ、同様 ... 。
  
  GIMP 2.10.x で OS Windows 11 限定の 直し になります。

全体の Code については  別投稿 にしますね。



0 件のコメント:

コメントを投稿