Files
CMLeonOS/utils/EnvironmentVariableManager.cs

165 lines
5.6 KiB
C#
Raw Normal View History

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;
}
}
}
}