プロが教える店舗&オフィスのセキュリティ対策術

Windows10での環境変数のパス指定はコンパネ→システム→システムの詳細設定→環境変数と進んで環境変数PATHを編集して指定することができます。確認したのですが、確かにそうなっています。スペルミスも発見できません(昔と違って表のようになってます)。それを指定した後、パワーシェルでその新規に指定したパスでの実行ファイルを入力しても実行しません。実行ファイルが見つからないというメッセージです。
環境変数PATHがどうなっているか調べるためにコマンドプロンプト(パワーシェルじゃないもの)でPATHコマンドを入力してみると確かに指定されていません。指定したフォルダが入っていないのです。
設定しているのに、設定されていないようになっている理由が不明です。なせ有効にならないのだろうと思うのですが。例えばフォルダ名が.abcのように隠しファイルのようなドットが先頭に入っているとダメなのでしょうか。確かに設定されているのに、何かの理由で有効になっていない理由が知りたいのですが。そして有効化したいのです。よろしくお願いします。

A 回答 (8件)

> 環境変数PATHに制限をつけた理由が今一つわからない感じです。



半角で2000文字ですと、約2KBですので、そんなに大きくは無いですね。

ただ、ここに書かれたパスの直下にあるファイルも参照しないといけませんから、実質はそれ以上だと思うんですよ。

あと、専門家ではないので分かりませんが、データ量に制限を掛けないと、バッファオーバーフロー等、セキュリティ上の問題もあるのかなと思いました。

あとは、恐らく、2000文字もあれば、一般的には十分なのだと思います。

質問者さんの環境で、なぜそんなに多くの環境変数が登録されているのかが分からないです。プログラミングとか、開発をされているのでしょうか。


> %USERPROFILE%とか%SystemRoot%というのはワイルドカードのようなものでそれ自体、環境変数なのかなと思うのですが、それはどうやって決まってくるのでしょうか。

レジストリ内を探すと、

「USERPROFILE」は、
「HKEY_CURRENT_USER\Volatile Environment」

「SystemRoot」は、
「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion」

に記述されています。

ただ、ここに書かれた値がシステムに反映されているのかと言えば、そうではない可能性もあるかと思います。

特に、「Volatile Environment」は、訳すと「揮発性環境変数」という意味です。


> ユーザが設定するものではなく、OSが決めているということなのでしょうか。

ユーザーが書き換えたり出来ない可能性はあるかも知れません。

詳しくは、WEB上をくまなく探してみないと分からないかも知れません。

ただ、重要な環境変数ですから、書き換えられても書き換えない方が無難だと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。私はユーザ全体からすると開発側の人間だと思います。プログラムのソースコードを書いています。それを売っているわけではなくて、理系の科学技術系のシミュレーションプログラムを自分と少しのメンバーのために書いています。そういう意味で例外処理対策とかが甘っちょろいプログラムになっていますが、Visual studioの機能は使います。本来、自分のコードにだけ集中したいのでレジストリなどの環境設定関係には疎いです。解説ありがとうございました。

お礼日時:2020/11/27 19:48

2000文字を超えているという事は、不要なパスが結構含まれている気がします。



私の環境(Windows10 Home バージョン:1909 64bit)では、環境変数の「Path」は以下のようになっています。

■ ユーザー
%USERPROFILE%\AppData\Local\Microsoft\WindowsApps

■ システム
%SystemRoot%\system32
%SystemRoot%
%SystemRoot%\System32\Wbem
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
%SYSTEMROOT%\System32\OpenSSH\

上記で正常にWindowsが動作していますので、最低限上記だけ登録されていれば問題ない気がします。

あとは、ご自身がインストールした記憶があるプログラム関連のパスだけ残して、削除しても問題無いのではないでしょうか。

念の為、当該の「Path」の値をテキストファイル等にコピー&ペーストして保存し、復元ポイントも作成した上で実行すれば、ほぼ心配無い気がします。

あとは、何かのパスが通らないようになったら、その都度対応すれば良いのではないでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。PATHや環境変数が重複して設定されている場合もありました。どう考えても消して良さそうなものは消していきました。一方で環境変数PATHに制限をつけた理由が今一つわからない感じです。プログラムの格納先なのだから、いわば、住所録とか電話帳であり、量的に必要なだけあっていいんじゃないかという気がしました。環境変数をいくらでもつけることができるわけでもないからおのずと上限が決まってくるわけで、初めから上限をつける(住所録の紙面の数を限定する)必要はないはずだと思っていたのですが。
ところで、%USERPROFILE%とか%SystemRoot%というのはワイルドカードのようなものでそれ自体、環境変数なのかなと思うのですが、それはどうやって決まってくるのでしょうか。ユーザが設定するものではなく、OSが決めているということなのでしょうか。

お礼日時:2020/11/26 01:23

No5のお礼の内容がよく分かりませんが、システム環境変数のPATHとユーザー環境変数PATHのそれぞれが2000文字を越えるということでしょうか?


さっきちょっと書き誤りましたが、
「システム環境変数とユーザー環境変数のそれぞれ約2000文字可能なはずなので、越える方から余裕のある方へ移すとか、」の誤りです。

あとは、本当に環境変数初期値に設定が必要か、1つ1つのディレクトリについて吟味するとか。使う予定の無いベンダー独自ソフト用とか。

後半にお書きのことについては、どこかで制限を設けないといけないので、設計時点の判断では十分大きい数字の約2000にしたと言うことでしょう。昔はもっと短かった気がします。

ファイルのパスの最大長も255文字と今となっては短いので、ファイルを階層の下の方のフォルダーに移動させると制限を超えてアクセス出来なくなると言うこともあります。現在はレジストリ変更で上限を増やせるようですが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。2000文字オーバーであり、2000文字を下回らない限り修正も受け付けてくれないということでした。今回システムとユーザの両方に同一の環境変数の指定があったり、片方だけみても同一の環境変数の指定がありました。ナニコレ?という感じです。自分ではやっていません。何かインストールするときそうなったとしか思えません。思い切って軽量化してOKを押してもメッセージが出なくなりました。C:\Windows\systemなどいうようなところは環境変数にしてしなくてもいいはずだと思うのですが、指定してあります。
あと環境変数の指定の中に%SystemRoot%とか%USERPROFILE%というようなどこかで定義されたものを変数として使ったりする場合があります。この変数もある程度長いですが、どこかで定義していたら一気に変更できたりするのですが、これはどこで指定しているのでしょうか。自動で決まっており動かせないものでしょうか。

お礼日時:2020/11/17 13:21

上限は約2000文字のはずですが、それを越えてたという事ですかね。

なんと。
システム環境変数とユーザー環境変数のそれぞれ約2000文字可能なはずなので、余裕のある方から他方に移すとか、C:\Program FilesをC:\PROGRA~1にするとか。
後者は、コマンドプロンプトで、dir c:\ /x で名前(8文字)を確認してください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。2300文字だった場合、少し減らして2200文字にしたとしても200文字オーバーなのでその設定は受け付けず、2300文字のままと思います。緩和される方向に減らしたとしても受け付けられないことには変わらないので2300から動かない、そういう風になっているようです。
自分が使っている他のPCを調べたところ、やはりこれほど大きな環境設定はありません。問題のPCをみたところ、ディスプレイ関係(Nvidia)toka
intelのドライバのライブラリをいろいろ指定してパスが大きくなっているみたいでした。
ところで、環境設定とかパスの文字制限ですが、この程度の量はメモリとかディスク容量からするとほぼゼロのはずですね。なぜこういう制約があるのかなと思いました。例えて言うならどんなに辞書の収録を大きくしても紙が足りないから刷って作れないということはないと思うのですが。多くのソフトを同時に起動させるのはメモリの制限できまるのであり、起動できるソフトウェアは許す限りどこまで多くてもいいのではないかと思ったのですが。

お礼日時:2020/11/16 13:06

「.abc」フォルダでもパスは通りました。



スペルミスは無いとの事ですが、一度、「C:\xxx」のようなシンプルなパスなら通るか、テストしてみると良いかと思います


又、環境変数を変更するソフトもありますので、そちらでもテストしてみると良いかと思います。

eve(Environment Variable Editor)
https://www.vector.co.jp/soft/dl/win95/util/se27 …

※環境変数を変更後、最後に「保存して適用」をクリックして閉じます。


又、「setx」コマンドでも環境変数を書き換えられますが、環境変数がおかしくなる場合があるようなので、あまりお勧めはしません。

他に手が無ければ、事前に対象となる環境変数の変更前の値をバックアップしてから試してみるのも良いかも知れません。

レジストリで言えば、環境変数の場所は、
「HKEY_CURRENT_USER\Environment」(ユーザー)と、
「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment」(システム)です。


何も手立てが無くなったら、「C:\Windows」フォルダ内に対象プログラム(「~.exe」等)をコピーしてやればパスが通る筈ですので、とりあえずそれでも良いのではないでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。お世話になります。ひとまず問題の原因が分かったように思っています。PATHの文字数が長すぎるということです。なんとか副作用がないように短くする方法を考える必要があると思います。
PATHは";"で切る項目数ではなく、全体の文字数の制限があるようです。

お礼日時:2020/11/15 19:49

まずPowerShell上でPathを確認しましょう。


プロンプトで
$ENV:Path
と入れてEnterしてください。あるいは読みやすくするために
$ENV:Path.split(';')
でもよいです。
これで表示されるのがPowerShellで認識されているPathです。
設定が反映されていないならWindowsごと再起動する方が良いです。
再起動した上でシステム詳細とPowerShell上でPathがどうなっているか確認下さい。

なお、PowerShell上で環境変数Pathを設定する方法は下記に。
https://qiita.com/gx3n-inue/items/00ee48996e9730 …
ただし、これだとシステム設定はされないのでPowerShellを立ち上げるたびに再設定が必要になると思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。PATHを指定するコンパネ以下の画面では確かにある、しかし、効いてないという質問だったのですが、原因が分かりました。PATHが長すぎるということです。実際にあの画面をOKで保存するときにエラーになりました。見るだけだったらキャンセルでいいので気づきませんでした。OKだったらそれを保存して有効化するということになるのでNGとなります(文字数制限)。とすると、PATHを短くするわけですが、これが案外面倒です。よく見ると重複もあります。似たような名前もあります。Program Filesというので14文字ですが、これがいっぱいになるとそれだけで文字数制限に影響します。これを$PFとかで短くできないかなと思うのですが。

お礼日時:2020/11/15 19:45

既に起動中のプログラムに環境変数変更は伝搬しません。


変更後に、Explorerから起動したプログラムにだけ有効です。
PowerShellを起動しましょう。

OS全体を再起動する必要は無いです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。環境変数PATHを設定してその後、Powershellを起動しているのですが、環境変数が反映されないですね。再ブートも試みています。Powershell上でpathを確認することは可能でしょうか。現在は起動しないがゆえにPATH変更が効いてないということになりますが。

お礼日時:2020/11/15 01:06

環境変数を変更したあとに、Windowsを再起動しないと変更した内容が有効にならなかったと思います。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!