Trong khi tôi chưa bao giờ có thể nhận được câu trả lời cho điều này cho đến nay, tôi đã phải đưa ra một công việc xung quanh. Đây có thể không phải là giải pháp tốt nhất, nhưng nó hoạt động. Về cơ bản những gì chúng tôi đã thực hiện là encypted file app.config của chúng tôi, và cho nó một cái tên mới. Khi ứng dụng khởi động, nó sẽ lấy tệp được mã hóa, giải mã nó và ghi nó vào tệp tạm thời của Windows. Điều này đảm bảo rằng tệp là một số tên ngẫu nhiên duy nhất mà không ai có thể tìm thấy và chúng tôi không phải quản lý tệp, vì Windows sẽ tự động xóa tệp đó cho chúng tôi. Bằng cách này, mỗi lần khởi động lại chúng tôi có thể viết lại một tệp mới và sử dụng nó. Đây là đoạn mã cơ bản cho bất kỳ ai quan tâm.
Phương thức đầu tiên này, LoadFileAppConfig()
, sẽ tải lên tệp. Trong trường hợp này, vì chúng là các dịch vụ, chúng ta cần nạp đường dẫn thực hiện và chuyển nó tới phương thức thích hợp. Chúng ta lấy lại đường dẫn của app.config đã giải mã, và sau đó sử dụng phương thức SetData()
để đặt nó là đường dẫn app.config.
/// <summary>
/// Loads the Local App.Config file, and sets it to be the local app.config file
/// </summary>
/// <param name="p_ConfigFilePath">The path of the config file to load, i.e. \Logs\</param>
public void LoadFileAppConfig(string p_ConfigFilePath)
{
try
{
// The app.config path is the passed in path + Application Name + .config
m_LocalAppConfigFile = ProcessLocalAppConfig(p_ConfigFilePath + this.ApplicationName + ".config");
// This sets the service's app.config property
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", m_LocalAppConfigFile);
}
catch (Exception ex)
{
throw ex;
}
}
Trong phương pháp này, chúng tôi sẽ giải mã và trả về dưới dạng chuỗi và sau đó ghi tệp đó vào tệp temp Windows của chúng tôi.
public string ProcessLocalAppConfig(string p_ConfigFilePath)
{
try
{
string fileName = Path.GetTempFileName();
string unencryptedConfig = DecryptConfigData(p_ConfigFilePath);
FileStream fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write);
StreamWriter streamWriter = new StreamWriter(fileStream);
if (!string.IsNullOrEmpty(unencryptedConfig))
{
try
{
streamWriter.BaseStream.Seek(0, SeekOrigin.End);
streamWriter.WriteLine(unencryptedConfig);
}
catch (IOException ex)
{
Debug.Assert(false, ex.ToString());
}
finally
{
streamWriter.Close();
}
return fileName;
}
return null;
}
catch (Exception)
{
throw;
}
}
phương pháp cuối cùng này có trong đường dẫn của app.config được mã hóa, sử dụng công cụ giải mã của chúng tôi để giải mã các tập tin (đảm bảo rằng chúng tôi có thể giải mã nó, và rằng nó là loại tập tin bên phải) và sau đó trả lại nội dung được giải mã dưới dạng chuỗi thành phương pháp ở trên.
private string DecryptConfigData(string p_AppConfigFile)
{
string decryptedData = null;
TMS.Pearl.SystemFramework.CryptographyManager.CryptographyManager cryptManager = new TMS.Pearl.SystemFramework.CryptographyManager.CryptographyManager();
try
{
//Attempt to load the file.
if (File.Exists(p_AppConfigFile))
{
//Load the file's contents and decrypt them if they are encrypted.
string rawData = File.ReadAllText(p_AppConfigFile);
if (!string.IsNullOrEmpty(rawData))
{
if (!rawData.Contains("<?xml")) //assuming that all unencrypted config files will start with an xml tag...
{
decryptedData = cryptManager.Decrypt(rawData);
}
else
{
decryptedData = rawData;
}
}
}
}
catch (Exception)
{
throw;
}
return decryptedData;
}
Bất kỳ ai có kiến thức máy tính nhiều hơn đều biết rằng có thể sử dụng trình ghi để xem tất cả IO ghi cho bất kỳ ứng dụng nào. – jgauffin
Tôi không chắc chắn rằng tôi nhận được điểm của bạn ... – Noah
Bạn nên biết rằng thật dễ dàng để tìm cấu hình ứng dụng của bạn. – jgauffin