C#操作注册表的问题,郁闷~~

taoyi 2005-02-22 05:01:50
代码如下:

System.Security.Permissions.RegistryPermission permission =
new RegistryPermission(System.Security.Permissions.RegistryPermissionAccess.AllAccess,
@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run");

//permission.Assert();
try
{
RegistryKey runKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
if (runKey != null)
{
runKey.SetValue("Stellar_Core_MSvr", Application.ExecutablePath);
return true;
}
return false;
}
finally
{
//System.Security.CodeAccessPermission.RevertAssert();
}

异常如下:
未处理的“System.UnauthorizedAccessException”类型的异常出现在 mscorlib.dll 中。

其他信息: 无法写入到注册表项。


高人啊,救我~
...全文
254 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyzo144 2005-03-26
  • 打赏
  • 举报
回复
open是只读的,用creat好像可以,试一下了
qiezic 2005-03-26
  • 打赏
  • 举报
回复
关注
Net_Soul 2005-03-26
  • 打赏
  • 举报
回复

同楼上的
Key.OpenSubKey("...",true);
不要忘记添加true就可以了
sun926 2005-02-24
  • 打赏
  • 举报
回复
[C#]
public RegistryKey OpenSubKey(
string name,
bool writable
);

writable
Set to true if you need write access to the key.

用OpenSubKey的时候默认是只读的
taoyi 2005-02-24
  • 打赏
  • 举报
回复
郁闷啦,,咋没人帮偶呢?
taoyi 2005-02-23
  • 打赏
  • 举报
回复
偶再顶~
yizhixiaozhu 2005-02-22
  • 打赏
  • 举报
回复
up
taoyi 2005-02-22
  • 打赏
  • 举报
回复
再顶~
taoyi 2005-02-22
  • 打赏
  • 举报
回复
偶的不是ASP.NET中调用COM,是WINDOWS应用程序,该如何配置呢?老兄~
tongzhenhua 2005-02-22
  • 打赏
  • 举报
回复
主要原因可能是没有权限访问

当试图在ASP.NET里面使用COM对象的时候,常常出现这个异常。
可以尝试在web.config里面添加以下一行以解决这个问题
<identity impersonate="true" userName="YourAdminUsr" password="YourAdminPwd"/>

另外,通过dcomcnfg.exe配置ASPNET用户的权限应该也可以解决这个问题。



C#创建和修改注册信息要调用的二个方法:
(1).CreateSubKey ( String key )方法:此方法是创建以后面的字符串为名称的子键。当然这种方法不仅能够创建子键,在下面介绍的程序中,也通过此种方法来创建一个主键。
(2).SetValue ( String name , String keyvalue )方法:此方法的作用有二点,一种可以用来重命名键值的数值,一种可以用来创建新的键值。具体情况如下:当打开的子键中,如果存在此键值,就把新值赋给他,实现重命名操作。如果不存在,则创建一个新的键值。

using Microsoft.Win32 ;
。。。

//以列表形式显示"HARDWARE"下面一层的子键和键值
protected void button1_Click ( object sender , System.EventArgs e )
{
listBox1.Items.Clear ( ) ;
RegistryKey hklm = Registry.LocalMachine ;
RegistryKey software = hklm.OpenSubKey ( "HARDWARE" ) ;
//打开"SYSTEM"子键
foreach ( string site in software.GetSubKeyNames ( ) )
//开始遍历由子键名称组成的字符串数组
{
listBox1.Items.Add ( site ) ;
//在列表中加入子键名称
RegistryKey sitekey = software.OpenSubKey ( site ) ;
//打开此子键
foreach ( string sValName in sitekey.GetValueNames ( ) )
//开始遍历由指定子键拥有的键值名称组成的字符串数组
{
listBox1.Items.Add ( " " + sValName + ": " + sitekey.GetValue ( sValName ) ) ;
//在列表中加入键名称和对应的键值
}
}
}
//创建子键和键值
protected void button2_Click ( object sender , System.EventArgs e )
{
listBox1.Items.Clear ( ) ;
RegistryKey hklm = Registry.LocalMachine ;
RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
RegistryKey ddd = software.CreateSubKey ( "ddd" ) ;
ddd.SetValue ( "www" , "1234" );
}
//创建一个主键并创建一个键值
protected void button3_Click ( object sender , System.EventArgs e )
{
listBox1.Items.Clear ( ) ;
RegistryKey hklm = Registry.LocalMachine ;
RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
RegistryKey main1 = software.CreateSubKey ( "main" ) ;
RegistryKey ddd = main1.CreateSubKey ( "sub" ) ;
ddd.SetValue ( "value" , "1234" ) ;
}
//重命名一个存在的键值
protected void button4_Click ( object sender , System.EventArgs e )
{
listBox1.Items.Clear ( ) ;
RegistryKey hklm = Registry.LocalMachine ;
RegistryKey software = hklm.OpenSubKey ( "HARDWARE", true ) ;
RegistryKey dddw = software.OpenSubKey ( "aaa" , true ) ;
dddw.SetValue ( "bbb" , "abcd" ) ;
}
public static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
}

110,571

社区成员

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

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

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