我有两个程序,每个程序都作为单独的帐户运行,即使这两个程序都是管理员帐户。第一个是加密文件的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