Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从ASP.NET网页调用C#dll方法调用时,无法写入注册表或从注册表读取_C#_Asp.net_.net_Registry - Fatal编程技术网

从ASP.NET网页调用C#dll方法调用时,无法写入注册表或从注册表读取

从ASP.NET网页调用C#dll方法调用时,无法写入注册表或从注册表读取,c#,asp.net,.net,registry,C#,Asp.net,.net,Registry,我在dll中有一个类,该类具有以下写入注册表的方法: public Boolean WriteDBConnectionInfoToRegistry(string txtDSN, string txtServer, string txtDatabase, string txtUser, string txtPassword, bool trusted) { SymmetricAlgorithm rijn = SymmetricAlgorithm.Create

我在dll中有一个类,该类具有以下写入注册表的方法:

public Boolean WriteDBConnectionInfoToRegistry(string txtDSN, string txtServer, string txtDatabase, string txtUser, string txtPassword, bool trusted)
        {
            SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();
            rijn.GenerateKey();
            rijn.GenerateIV();
            Boolean b1 = RegistryWrite("Software\\MyApp", "IV", Reverse(Convert.ToBase64String(rijn.IV)));
            Boolean b2 = RegistryWrite("Software\\MyApp", "Key", Reverse(Convert.ToBase64String(rijn.Key)));
            Boolean b3 = RegistryWrite("Software\\MyApp", "DSN", Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Reverse(txtDSN))));
            Boolean b4 = RegistryWrite("Software\\MyApp", "Server", Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Reverse(txtServer))));
            Boolean b5 = RegistryWrite("Software\\MyApp", "Database", Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Reverse(txtDatabase))));
            Boolean b6 = RegistryWrite("Software\\MyApp", "User", EncryptString(Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Reverse(txtUser))),rijn.IV,rijn.Key));
            Boolean b7 = RegistryWrite("Software\\MyApp", "Password", EncryptString(Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Reverse(txtPassword))), rijn.IV, rijn.Key));
            Boolean b8 = RegistryWrite("Software\\MyApp", "Trusted", Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Reverse(trusted ? "1" : "0"))));

            if (b1 && b2 && b3 && b4 & b5 & b6 & b7 & b8)
            {
                return true;
            }
            else
            {
                return false;
            }
        }


  private bool RegistryWrite(string subKey, string KeyName, object Value)
        {
            try
            {
                RegistryKey rk = Registry.LocalMachine;
                RegistryKey sk1 = rk.CreateSubKey(subKey);
                sk1.SetValue(KeyName.ToUpper(), Value);
                return true;
            }
            catch (Exception e)
            {
            }
            return false;
        }

这些方法包含在一个公共类中,该类是我在ASP.NET网页中安装的dll的一部分。当从Windows应用程序调用方法进行测试时,这些方法成功地写入注册表,但是当从网站中的隐藏代码调用该方法时,尽管返回true,它仍无法写入以创建文件夹和键。我怎样才能解决这个问题?.dll的框架是.NET2.0,web应用程序是4.0。感谢您的帮助。

ASP.NET运行时是一个“部分信任”的环境,因此即使您的网站遭到黑客攻击,攻击者也不会造成太大的破坏。注册表更改通常不仅需要完全信任,还需要运行应用程序,使其具有提升的权限。无法解释为什么它看起来有效,这就是为什么这是一个注释而不是答案。我会更改您的catch块,以便在出现错误时包含某种日志记录。您的代码也将从使用&&更改为&;那看起来像是打字错误。最后,检查分配给应用程序池帐户的权限,并确保未启用UAC。您知道如何将权限设置为所需级别吗?或者让我解释一下如何操作?权限已设置为“所需级别”,问题是您试图做一些不应该做的事情。请考虑另一种方法,它不需要运行网站代码提升或给Web应用程序写对注册表的访问。即,让安装脚本以相同的方式为服务于同一应用程序的所有服务器配置DB连接。