2014-04-11 86 views
0

我有兩個程序,每個程序都作爲單獨的帳戶運行,即使這兩個程序都是管理員帳戶。第一個是加密文件的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中,但我得到的訪問被拒絕,

+0

我似乎很明顯,但我會問無論如何 - 你確定這兩個帳戶都有權限讀取文件?您可以使用服務的帳戶登錄並在編輯器中打開該文件嗎? –

+0

這與加密/解密以及訪問該文件所做的一切無關。 –

+0

嗯,丹尼爾,我用Windows服務,管理員的帳戶登錄,我用文件資源管理器瀏覽,我看不到那個文件!它不在那裏。在帳戶中,文件列表是綠色的。我該如何解決? – user2471435

回答

1

您可能已成爲User Account Control Data Redirection的受害者。由於Windows Vista Windows不允許寫入某些目錄,並且會悄悄地將任何嘗試重定向到每個用戶虛擬存儲。該文件中創建您的應用程序可能介於結束

C:\用戶\ <用戶名> \應用程序數據\本地\ VirtualStore

和Windows服務是找錯了地方,因爲它是運行在不同的用戶帳戶下。