在visual studio中调试运行正常,但调用IIS虚拟目录抱错。请帮忙提示一下,哪里出现了问题,谢谢各位!代码如下:
using Microsoft.Win32; //对注册表操作一定要引用这个命名空间public partial class _Default : System.Web.UI.Page 
{
  protected void Page_Load(object sender, EventArgs e)
    {
       //获取注册表key码
        RegistryKey ddd = Registry.CurrentUser;
        RegistryKey ddd2 = ddd.OpenSubKey(@"Software\Tencent\QQGame\SYS");
        string str = (string)ddd2.GetValue("GameDirectory");
        Response.Write(str);
        
        ddd.Close();
        Response.End();
    }
}在visual studio中调试运行正常,得到结果  “C:\Program Files\Tencent\QQGame”
用虚拟目录访问,就报异常,如下:
未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
行 42:         RegistryKey ddd = Registry.CurrentUser;
行 43:         RegistryKey ddd2 = ddd.OpenSubKey(@"Software\Tencent\QQGame\SYS");
行 44:         string str = (string)ddd2.GetValue("GameDirectory");
行 45:         Response.Write(str);
行 46:         
 源文件: e:\work\Xml\Default.aspx.cs    行: 44 堆栈跟踪: 
[NullReferenceException: 未将对象引用设置到对象的实例。]
   _Default.Page_Load(Object sender, EventArgs e) in e:\work\Xml\Default.aspx.cs:44
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +47
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061 

解决方案 »

  1.   

    我查了一些资料,好像说是权限问题;
    我想把这个web程序做成统一安装文件,能不能直接在程序安装时设置,不用手工设置。
    怎样设置?
      

  2.   

    在 Visual Studio 中调试你打开注册表键 HKEY_CURRENT_USER,打开的是你当时登录 Windows 的用户帐号的注册表所在位置。IIS运行的时候,使用的是 aspnet 或者 network service,这个时候读取的 hkey_current_user 和你调试的时候就不一样了,打开的是 IIS 服务运行帐户的注册表位置,肯定是不存在你的那个 Software\Tencent\QQGame\SYS 键值的。解决这个问题,可以考虑将 IIS Admin 的服务帐号设置为你调试时的那个帐号。在 IIS 下读取注册表 Current_User 的内容本来就不是个好主意。
      

  3.   


    同意楼上的,肯定是iis帐户的权限问题。
      

  4.   

    点击项目右键 把里面的 匿名访问和集成windows身份验证选中试试
      

  5.   

    to CloneCenter:
    你分析得有道理,可我必须要提取HKEY_CURRENT_USER下的这个值,有什么好办法?
    我想单独做一个应用程序可以做到,这样就分成两部分安装了,我不赞成。
      

  6.   

    你把ISUR_xxx放到Administrators组里试试
      

  7.   

    应该是你的对象
    ddd和ddd2为null引起的
      

  8.   

    权限不够。如果你需要用IIS来操作注册表,需要提高IIS帐户的权限。
    在visual studio中调试运行正常,这个是因为用的不是IIS帐户。
      

  9.   

    理论上应该可以做到,可以想办法访问注册表的 HKEY_USERS 下的键值,这个键下面对应的类似于 HKEY_USERS\S-1-5-18 这样的就是对应于系统中 Windows 的目录,现在的问题是 如何根据用户名获得这个用户的标识?估计需要 API 之类的东西来做了。
    另外,还要为IIS的运行帐号提供必要的权限(通常是管理员权限)以便程序可以读取注册表的这些键值,但是这样的话,Web的安全性就差了。