C#--操作注册表--提示“未将对象引用设置到对象的实例”

冰灵公主 2011-02-12 10:38:13
WEB 版的系统


状况:用VS2005 查看页面运行 可以访问到 currentuser\software\microsoft\office

但是 发布系统后,iis中运行页面 就提示“ 未将对象引用设置到对象的实例”,经检查是因为 iis中运行时

microsoft节点下面根本就没有office这个节点了。



不知道是不是权限问题,我在注册表的office节点上加了 aspnet,internet来宾账户,networkservice 完全控制权限,

但还是不行。



...全文
355 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xueerwengu 2011-02-28
  • 打赏
  • 举报
回复
word
vs里运行没有问题,发布到iis就是找不到,我也出现这种问题,求救
冰灵公主 2011-02-14
  • 打赏
  • 举报
回复
怎么办???????
冰灵公主 2011-02-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wuyq11 的回复:]
修改应用程序池的标识为本地系统
检查键值是否为null
[/Quote]


我改的是指定账户 administrator ,就可以了

但是不安全,不能用在网站服务器上,不知道还有没有别的办法
冰灵公主 2011-02-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 virtualas 的回复:]
不会是权限问题,权限问题会返回拒绝访问,问题出在用户上,HKCU是当前用户的注册表信息,不同的用户HKCU中的内容是不一样的,Web网站尽量不要使用注册表来存储信息,要使用的话也要用HKLM不要用HKCU
[/Quote]

我的目的是删除
wd.DeleteSubKeyTree("Resiliency"); 

这个节点是自己生成的

HKLM我看了,没有这个节点,那有没有办法控制HKCU呢?
蔡袅 2011-02-12
  • 打赏
  • 举报
回复
遇到未将对象设置引用到实例,最好断点试试 看哪里是null
billsquall 2011-02-12
  • 打赏
  • 举报
回复
iis 与 vs是同一个电脑吗?是不是环境不一样啊?

不行就用远程调试
冰灵公主 2011-02-12
  • 打赏
  • 举报
回复
肯定有office ,之前安装的是office2003 ,后来升级到了office2007

我是想访问office里面的word,但是现在连office都找不到

vs里运行没有问题,发布到iis就是找不到
liuwei2500 2011-02-12
  • 打赏
  • 举报
回复
查看服务器上是否安装office,并且查看对office所需的程序集是否存在。
  • 打赏
  • 举报
回复
空指针了
None465465535 2011-02-12
  • 打赏
  • 举报
回复
不会是权限问题,权限问题会返回拒绝访问,问题出在用户上,HKCU是当前用户的注册表信息,不同的用户HKCU中的内容是不一样的,Web网站尽量不要使用注册表来存储信息,要使用的话也要用HKLM不要用HKCU
冰灵公主 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wuyq11 的回复:]
修改应用程序池的标识为本地系统
检查键值是否为null
[/Quote]

谢谢,我已经按你说的设置了标识为本地系统,可还是不行

键值检查了null可以避免错误,但是注册表中确实有我要找的节点
冰灵公主 2011-02-12
  • 打赏
  • 举报
回复


以上是我电脑的


我已经知道怎么访问office节点了,可是又出现了不能删除的问题
下面是我的源代码,可以创建个页面试试

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Microsoft.Win32;

public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Method1();
}

public void Method1()
{
try
{
RegistryKey key = Registry.CurrentUser;
RegistryKey software = key.OpenSubKey("Software");
RegistryKey micro = software.OpenSubKey("Microsoft", true);
RegistryKey offi = micro.CreateSubKey("Office");
RegistryKey version = offi.CreateSubKey("12.0");
RegistryKey wd = version.CreateSubKey("Word");
RegistryKey resi = wd.CreateSubKey("Resiliency"); //这个节点是只有WORD有禁用文件或是可恢复文件时才会生成,我的目的是如果有此节点则删除 if (resi == null)
this.Response.Write("null");
else
{
wd.DeleteSubKeyTree("Resiliency"); //运行该句无异常,并且可以在页面上输出OK,但是一查注册表,这个节点还是没有删除! this.Response.Write("ok");
}
//string[] kns = wd.GetSubKeyNames();

//foreach (string kn in kns)
//{
// if (kn == "Resiliency")
// {
// key.DeleteSubKeyTree("Software\\Microsoft\\Office\\12.0\\Word\\Resiliency");
// }
//}
key.Close();

}
catch (Exception)
{
throw;
}
}
}
wuyq11 2011-02-12
  • 打赏
  • 举报
回复
修改应用程序池的标识为本地系统
检查键值是否为null
冰灵公主 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 billsquall 的回复:]
iis 与 vs是同一个电脑吗?是不是环境不一样啊?

不行就用远程调试
[/Quote]


就是一台电脑,没错
冰灵公主 2011-02-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yeaicc 的回复:]
为IIS开权限
[/Quote]

开什么权限呢?

我的代码很简单:

定义了个currentuser 的key 变量

定义了offi=key.opensubkey("Software\\Microsoft\\Office");

定义了wd=offi.opensubkey("word"); //offi在iis运行后是null,导致提示“未将对象引用设置到对象的实例”
yalan 2011-02-12
  • 打赏
  • 举报
回复
这个问题没有接触过,不过我觉得应该是路径的问题。

既然调试能通过而发布后就通过不了,一般检查相对/绝对路径和文件权限
yeaicc 2011-02-12
  • 打赏
  • 举报
回复
为IIS开权限

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧