我有兩個程序,每個程序都作爲單獨的帳戶運行,即使這兩個程序都是管理員帳戶。第一個是加密文件的Windows Forms應用程序,另一個是Windows服務。我有一個文件,我使用Windows 8機器上的標準管理員帳戶從Windows窗體程序進行加密。如果我寫入一個像c:\ test.xml這樣的位置,它似乎可以工作。但是,在安裝程序將所有這些安裝到目錄的生產環境中,不能使用它。將文件寫入一個用戶,訪問另一個失敗
然後,我嘗試使用第二個程序(一個Windows服務)在同一目錄中讀取和解密同一個文件,該程序在名爲「Admin」的另一帳戶下運行。問題是我在嘗試執行File.ReadAllText
時遇到了Access Denied
錯誤。 AES Encryption是否使用本地機器證書存儲,因爲我想知道是否存在許可問題?
的WinForms的代碼(在標準管理員帳戶運行):
string fileName = System.IO.Path.Combine(Application.StartupPath, "alphaService.xml");
// var fileName = @"c:/text.xml";
XDocument doc = new XDocument();
XElement xml = new XElement("Info",
new XElement("DatabaseServerName", txtServerName.Text),
new XElement("DatabaseUserName", txtDatabaseUserName.Text),
new XElement("DatabasePassword", txtDatabasePassword.Text),
new XElement("ServiceAccount", txtAccount.Text),
new XElement("ServicePassword", txtServicePassword.Text),
new XElement("RegistrationCode", txtRegistrationCode.Text));
doc.Add(xml);
//using (var aes = Aes.Create())
//{
// aesKey = aes.Key;
// key = Convert.ToBase64String(aes.Key);
//}
string sKey = "LvtZELDrB394hbSOi3SurLWAvC8adNpZiJmQDJHdfJU=";
var aesKey = Convert.FromBase64String(sKey);
string encyptedText = EncryptDecrpt.EncryptStringToBase64String(doc.ToString(), aesKey);
File.WriteAllText(fileName, encyptedText);
Windows服務代碼(下帳戶管理員運行):
string path = AppDomain.CurrentDomain.BaseDirectory;
eventLog1.WriteEntry(path);
string fileName = System.IO.Path.Combine(path, "alphaService.xml");
// var fileName = @"c:/text.xml";
string sKey = "LvtZELDrB394hbSOi3SurLWAvC8adNpZiJmQDJHdfJU=";
Byte[] keyBytes = Convert.FromBase64String(sKey);
var encryptedText = File.ReadAllText(fileName, new ASCIIEncoding());
string xmlStr = DecryptStringFromBase64String(encryptedText, keyBytes);
我也嘗試運行Windows窗體爲管理員。我試圖將用戶「Admin」添加到文件ACL中,但我得到的訪問被拒絕,
我似乎很明顯,但我會問無論如何 - 你確定這兩個帳戶都有權限讀取文件?您可以使用服務的帳戶登錄並在編輯器中打開該文件嗎? –
這與加密/解密以及訪問該文件所做的一切無關。 –
嗯,丹尼爾,我用Windows服務,管理員的帳戶登錄,我用文件資源管理器瀏覽,我看不到那個文件!它不在那裏。在帳戶中,文件列表是綠色的。我該如何解決? – user2471435