2026-02-01 18:05:54 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.IO;
|
2026-02-05 01:43:30 +08:00
|
|
|
|
using CMLeonOS.Logger;
|
2026-02-01 18:05:54 +08:00
|
|
|
|
|
|
|
|
|
|
namespace CMLeonOS
|
|
|
|
|
|
{
|
|
|
|
|
|
public class EnvironmentVariableManager
|
|
|
|
|
|
{
|
|
|
|
|
|
private static EnvironmentVariableManager instance;
|
|
|
|
|
|
private string envFilePath = @"0:\system\env.dat";
|
|
|
|
|
|
private Dictionary<string, string> environmentVariables;
|
2026-02-05 01:43:30 +08:00
|
|
|
|
private static CMLeonOS.Logger.Logger _logger = CMLeonOS.Logger.Logger.Instance;
|
2026-02-01 18:05:54 +08:00
|
|
|
|
|
|
|
|
|
|
private EnvironmentVariableManager()
|
|
|
|
|
|
{
|
|
|
|
|
|
environmentVariables = new Dictionary<string, string>();
|
|
|
|
|
|
LoadEnvironmentVariables();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static EnvironmentVariableManager Instance
|
|
|
|
|
|
{
|
|
|
|
|
|
get
|
|
|
|
|
|
{
|
|
|
|
|
|
if (instance == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
instance = new EnvironmentVariableManager();
|
|
|
|
|
|
}
|
|
|
|
|
|
return instance;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void LoadEnvironmentVariables()
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (File.Exists(envFilePath))
|
|
|
|
|
|
{
|
|
|
|
|
|
string[] lines = File.ReadAllLines(envFilePath);
|
|
|
|
|
|
foreach (string line in lines)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(line) && line.Contains("="))
|
|
|
|
|
|
{
|
|
|
|
|
|
int equalIndex = line.IndexOf('=');
|
|
|
|
|
|
string varName = line.Substring(0, equalIndex).Trim();
|
|
|
|
|
|
string varValue = line.Substring(equalIndex + 1).Trim();
|
|
|
|
|
|
environmentVariables[varName] = varValue;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Info("EnvManager", $"Loaded {environmentVariables.Count} environment variables from file");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Error("EnvManager", $"Error loading environment variables: {ex.Message}");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void SaveEnvironmentVariables()
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Info("EnvManager", $"Saving {environmentVariables.Count} environment variables to file");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
|
|
|
|
|
|
// 构建文件内容
|
|
|
|
|
|
string content = "";
|
|
|
|
|
|
foreach (var kvp in environmentVariables)
|
|
|
|
|
|
{
|
|
|
|
|
|
content += $"{kvp.Key}={kvp.Value}\n";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 使用FileSystem的WriteFile方法来确保在Cosmos中正常工作
|
|
|
|
|
|
// 注意:这里需要访问FileSystem实例,但EnvironmentVariableManager是独立的
|
|
|
|
|
|
// 所以我们使用File.WriteAllText,但添加重试机制
|
|
|
|
|
|
|
|
|
|
|
|
int retryCount = 0;
|
|
|
|
|
|
bool success = false;
|
|
|
|
|
|
|
|
|
|
|
|
while (retryCount < 3 && !success)
|
|
|
|
|
|
{
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
File.WriteAllText(envFilePath, content);
|
|
|
|
|
|
success = true;
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Info("EnvManager", "Environment variables saved successfully");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
retryCount++;
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Warning("EnvManager", $"Save attempt {retryCount} failed: {ex.Message}");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!success)
|
|
|
|
|
|
{
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Error("EnvManager", "Failed to save environment variables after 3 attempts");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Error("EnvManager", $"Error saving environment variables: {ex.Message}");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public bool SetVariable(string varName, string varValue)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(varName))
|
|
|
|
|
|
{
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Warning("EnvManager", "Variable name cannot be empty");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
Console.WriteLine("Error: Variable name cannot be empty");
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2026-02-05 01:43:30 +08:00
|
|
|
|
|
2026-02-01 18:05:54 +08:00
|
|
|
|
environmentVariables[varName] = varValue;
|
|
|
|
|
|
SaveEnvironmentVariables();
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public string GetVariable(string varName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (environmentVariables.ContainsKey(varName))
|
|
|
|
|
|
{
|
|
|
|
|
|
return environmentVariables[varName];
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine($"Error: Environment variable '{varName}' not found");
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void ListVariables()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (environmentVariables.Count == 0)
|
|
|
|
|
|
{
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Info("EnvManager", "No environment variables set");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Info("EnvManager", $"Listing {environmentVariables.Count} environment variables");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
foreach (var kvp in environmentVariables)
|
|
|
|
|
|
{
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Info("EnvManager", $" {kvp.Key}={kvp.Value}");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public bool DeleteVariable(string varName)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (environmentVariables.ContainsKey(varName))
|
|
|
|
|
|
{
|
|
|
|
|
|
environmentVariables.Remove(varName);
|
|
|
|
|
|
SaveEnvironmentVariables();
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Info("EnvManager", $"Environment variable '{varName}' deleted");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2026-02-05 01:43:30 +08:00
|
|
|
|
_logger.Warning("EnvManager", $"Environment variable '{varName}' not found");
|
2026-02-01 18:05:54 +08:00
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|