2014-04-11 54 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服务是找错了地方,因为它是运行在不同的用户帐户下。