在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
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
我想把这个web程序做成统一安装文件,能不能直接在程序安装时设置,不用手工设置。
怎样设置?
同意楼上的,肯定是iis帐户的权限问题。
你分析得有道理,可我必须要提取HKEY_CURRENT_USER下的这个值,有什么好办法?
我想单独做一个应用程序可以做到,这样就分成两部分安装了,我不赞成。
ddd和ddd2为null引起的
在visual studio中调试运行正常,这个是因为用的不是IIS帐户。
另外,还要为IIS的运行帐号提供必要的权限(通常是管理员权限)以便程序可以读取注册表的这些键值,但是这样的话,Web的安全性就差了。