C:\Users\user> SETX PATH "%PATH%;my-new-path"
↑このようにすると、既存のパスが重複してしまう。
C:\Users\user> SETX PATH "my-new-path"
↑このようにすると既存のパスが消えてしまう。
なぜでしょうか?
>> 既存のパスが重複してしまう。
>どういう結果のことをそう言っていますか?
既存のパスが全て2つずつになります。
systemでコマンドを呼ぶ前に
std:coutでコマンドの内容を表示しています。
その辺りが何か悪さしてますか?
>std:coutでコマンドの内容を表示しています。
これ消しても関係ないですね。
_dupenv_s だとシステム環境変数とユーザー環境変数を全部拾ってくるみたいです。
ユーザー環境変数だけで良いのですがどうすれば良いでしょうか?
これ使えば良さそうだけど、、C# で SETX または SETX に相当する関数がわかりません。
C#
1public static string? GetEnvironmentVariable (string variable, EnvironmentVariableTarget target);
C#
1using System; 2using System.Diagnostics; 3using System.IO; 4 5namespace SetEnv 6{ 7 class Program 8 { 9 static void Main(string[] args) 10 { 11 string sEnvPath = System.AppDomain.CurrentDomain.BaseDirectory; 12 DirectoryInfo di = new DirectoryInfo(sEnvPath); 13 // 親のディレクトリを取得する 14 DirectoryInfo diParent = di.Parent; 15 string sDllPath = diParent.FullName + "\dll;"; 16 string sPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.User); 17 if(sPath.Contains(sDllPath)) 18 { 19 Console.WriteLine("環境設定済です。"); 20 Console.WriteLine("何かキーを押して下さい…"); 21 Console.ReadLine(); 22 return; 23 } 24 ProcessStartInfo startInfo = new ProcessStartInfo("SETX"); 25 startInfo.WindowStyle = ProcessWindowStyle.Normal; 26 if (sPath.Substring(sPath.Length - 1, 1).Equals(";")) 27 { 28 startInfo.Arguments = "Path \"" + sPath + sDllPath; 29 } 30 else 31 { 32 startInfo.Arguments = "Path \"" + sPath + ";" + sDllPath; 33 } 34 Process.Start(startInfo); 35 Console.WriteLine("環境設定が終了しました。"); 36 Console.WriteLine("何かキーを押して下さい…"); 37 Console.ReadLine(); 38 } 39 } 40}
一応、これで解決したけど、jsonやらなんやら余計なファイルが出来て好かん。
.NET 5.0 が入ってない環境だと動かない気がするし…
C++ で解決する方法があれば教えて下さい。
追記
やっぱり.NET 5.0 が入ってない環境だと動きませんでした。
それと、娘の学校のパソコンで動かそうとしたら、ウイルスの脅威とか言われて動きませんでした。
どうすれば良いでしょうか?
回答2件
あなたの回答
tips
プレビュー