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;namespace WebApplication1
{
    public partial class WebForm3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {        }        protected void Button1_Click(object sender, EventArgs e)
        {
            RegistryKey reg = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Explorer", true);
            Response.Write(reg.CreateSubKey("test"));
        }
    }
}

解决方案 »

  1.   

    把true换成RegistryKeyPermissionCheck.Default试试。
      

  2.   

    public Microsoft.Win32.RegistryKey OpenSubKey ( System.String name , System.Boolean writable )
        Microsoft.Win32.RegistryKey 的成员摘要:
     检索指定的子项。  参数:
    name: 要打开的子项的名称或路径。 
     writable: 如果需要项的写访问权限,则设置为真。 返回值:
     请求的子项;如果操作失败,则为空。  异常:
    System.ArgumentNullException: name 为空。 
    System.ArgumentException: 指定子项的长度大于允许的最大长度(255 个字符)。 
    System.ObjectDisposedException: 要删除的 RegistryKey 已关闭(无法访问关闭的项)。 
    System.Security.SecurityException: 用户没有 RegistryPermission.SetInclude(delete, currentKey) 访问权限。 
    只有这个方法,最后的参数是Bool值的.
      

  3.   

    这问题还真实怪,我电脑里已经没有2003了,没法帮你分析。
    要不你再把open换成create试试。
      

  4.   

    我发现了,是操作HKEY_USERS的值而不是HKEY_CURRENT_USER
      

  5.   

    HKEY_USERS包含了所有用户,不是当前用户是哪一个?是不是你加载的方式不同,进程属于另外的用户?
      

  6.   


    RegistryKey reg = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Internet Explorer\test");Response.Write(reg);  这么写试试
      

  7.   

    VS03 出了点问题 现在用不了,看了一下以前的demo 就是这么写的~
      

  8.   

    这个键值HKEY_USERS\S-1-5-21-790525478-329068152-682003330-1007\Software\Microsoft\Internet Explorer 下面也有,执行后在这个键值下面生成test,还是不行.
      

  9.   

    几经波折,只为对得起那份期待~环境 vs2003 winform 程序 C# 语言RegistryKey reg = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Internet Explorer\test");
    reg.CreateSubKey("name").SetValue("key", "value");reg.Name :
    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\testreg.ToString() :
    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\test [0xe98]
     
    在vs2005中 reg.Name=reg.ToString()=HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\testRegistryKey reg = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Internet Explorer\test");
    reg.CreateSubKey("name").SetValue("key", "value");这两行代码在vs2003与vs2005中效果一样需要注意几个地方 Registry 下面有7个枚举值 分别为:
    ClassesRoot,CurrentConfig,CurrentUser,DynData,LocalMachine,PerformanceData,Users
    其中DynData与PerformanceData 不能编程访问LocalMachine与Users 也需要注意一下RegistryKey reg = Registry.Users.CreateSubKey(@"SoftwareTemp\***\***\test");
    reg.CreateSubKey("name").SetValue("key", "value");RegistryKey reg = Registry.LocalMachine.CreateSubKey(@"SoftwareTemp\***\***\test");
    reg.CreateSubKey("name").SetValue("key", "value");以上会出错 因为LocalMachine与Users 在创立的新目录或新键时,下属第一级目录必须存在 RegistryKey reg = Registry.Users.CreateSubKey(@".DEFAULT\***\***\test");
    reg.CreateSubKey("name").SetValue("key", "value");RegistryKey reg = Registry.LocalMachine.CreateSubKey(@"HARDWARE\***\***\test");
    reg.CreateSubKey("name").SetValue("key", "value");这样就不会出错,二级目录没有要求,可以新建ClassesRoot,CurrentConfig,CurrentUser 没有限制一级目录也可以新建
      

  10.   

    RegistryKey reg = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Internet Explorer\test");
        reg.CreateSubKey("name").SetValue("key", "value");reg.Name :
    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\test这个的确可以打印出路径的名,但是你用regedit看,它的键值建立在HKEY_USERS\S-1-5-21-790525478-329068152-682003330-1007\Software\Microsoft\Internet  Explorer\test
    下面的.
    S-1-5-21-790525478-329068152-682003330-1007 这个串可能每台机都不同,但是大概的位置也可以找到的.
      

  11.   

    ?? 可是RegistryKey   reg   =   Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Internet   Explorer\test"); 
            reg.CreateSubKey("name").SetValue("key",   "value"); 
    这两行代码在我机器上确是 在HKEY_CURRENT_USER\Software\Microsoft\Internet   Explorer\test 上也就是reg.Name 所显示的位置
    reg.Name   : 
    HKEY_CURRENT_USER\Software\Microsoft\Internet   Explorer\test vs2003 与vs2005一样
      

  12.   

        楼主是想写注册表吗?     RegistryKey regK =Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Explorer",true );
                regK.CreateSubKey("a");     这样没有任何问题啊..
      有一个问题,在  @"Software\Microsoft\Internet Explorer",  中   这是一个注册表路径字符串,不能有空格,你再试试,Internet Explorer 中间只能有一个空格.我把楼主的代码copy到项目时,报的这个错,没有设置到对象的实例.楼主再试试..
      

  13.   

    VS2005没有任何问题啊,就是VS2003它写到
    HKEY_USERS\S-1-5-21-790525478-329068152-682003330-1007 
    这个下面了,不知道是怎样的问题.
    还有一个说明就是:WebForm写的,应该和WinForm差不多吧.不会有这样的差别吧.
      

  14.   

    我发现了,WinForm可以成功,WebForm就出现上面的问题,怎样解决呢????
      

  15.   

    哦? 有这事? 可惜我创建不了webform ,iis出错让我给卸了.
      

  16.   

    我换了我的手提,就是WebForm不行,Sandy945 你试下用创建WebForm运行看看,重新装IIS,创健不了的告诉我错误信息,我帮你解决
      

  17.   

    呵呵~ 我真挺想帮你的.可我现在手头没有现在系统的安装盘,系统装了快两年了.
    还下了一个IIS6.0的安装包,可复制文件的时候出错,忽略也没装上.
    最近在家养病,如果没辞职 用公司电脑应该能帮你解决. -_- ~
      

  18.   

    webForm和权限有关系的.winForm是运行在你当前登陆的用户名下,一般是登陆自己系统使用的都是具有管理员权限的用户名,如administartor这种用户.而webForm的话如果是win2003,默认下是network service(创建iis6应用池的默认用户)用户,这个用户没有操作注册表的权限.我把你的代码copy后提示如下
    说明: 应用程序试图执行安全策略不允许的操作。要授予此应用程序所需的权限,请与系统管理员联系,或在配置文件中更改该应用程序的信任级别。 异常详细信息: System.Security.SecurityException: 不允许所请求的注册表访问权。源错误: 
    行 4:  protected void Button1_Click(object sender, EventArgs e)
    行 5:  {
    行 6:  RegistryKey reg=Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Internet Explorer", true); 
    行 7:  Response.Write(reg.CreateSubKey("test")); 
    行 8:  }
    [color=#FF0000]版本信息: Microsoft .NET Framework 版本:1.1.4322.2379; ASP.NET 版本:1.1.4322.2379 

    [/color]
     
      

  19.   

    具体要给哪个文件夹权限我也搞不清楚..
    如果是fat32文件系统应该没有权限的问题
    如果是ntfs的话,你可以考虑把network service的读写权限加在系统盘试试,并且替换子权限.这样安全隐患就非常大了.