c# win7注册表【Registry】 操作

      2009年的在上海参加了win7的产品兼容性问题活动。在win7系统注册表信息的操作就比较麻烦...不像xp系统那样简单,win7安全性比较高点。

所以,在操作win7注册表是必须要有管理员身份才能操作注册表信息,这样不会被UAC(用户帐户控制)阻止访问操作注册表信息。

      这里讲一 C# 小列子(高手请绕过此地!), 我们平时都是在xp开发比较多...不过现在很多开发人员也在win7下开发了。

     下面是在 LocalMachine下的 一下注册表操作 ,就不详说了

private static void DeleteRegistry( string name)
{
string [] aimnames;
RegistryKey hkml
= Registry.LocalMachine;
RegistryKey software
= hkml.OpenSubKey( " SOFTWARE " , true );
RegistryKey aimdir
= software.OpenSubKey( " Microsoftss " , true );
aimnames
= aimdir.GetSubKeyNames();
foreach ( string aimKey in aimnames)
{
if (aimKey == name)
aimdir.DeleteSubKeyTree(name);
}
}

private static string GetData( string name)
{
string registData;
RegistryKey hkml
= Registry.LocalMachine;
RegistryKey software
= hkml.OpenSubKey( " SOFTWARE " , true );
RegistryKey aimdir
= software.OpenSubKey( " Microsoftss " , true );
registData
= aimdir.GetValue(name).ToString();
return registData;
}

private static void WriteValue( string name, string tovalue)
{
RegistryKey hklm
= Registry.LocalMachine;
RegistryKey software
= hklm.OpenSubKey( " SOFTWARE " , true );
RegistryKey aimdir
= software.CreateSubKey( " Microsoftss " );
aimdir.SetValue(name, tovalue);
}

private static bool IsExit( string name)
{
bool _exit = false ;
string [] subkeyNames;
RegistryKey hkml
= Registry.LocalMachine;
RegistryKey software
= hkml.OpenSubKey( " SOFTWARE " , true );
RegistryKey aimdir
= software.OpenSubKey( " Microsoftss " , true );
subkeyNames
= aimdir.GetValueNames();
foreach ( string keyName in subkeyNames)
{
if (keyName == name)
{
_exit
= true ;
return _exit;
}
}
return _exit;
}

      比如,当我们在xp系统下 软件执行Writevalue("版本号","v1.0.0.1"),一切都ok! 然后乐的就抛给了客户...没有思考。

一天客户换了win7系统 ,运了软件了。客户拉着42号鞋子的脸说,怎么软件在win7不能运行了....。问题就是上面开头说的了。

解决方法是有地....

        这里列举几种.

        第一种、教教客户、或者技术服务人员就好了。这个方法不需要修改我们的代码这是好处之一。只要, 点击.exe 右键

,在弹出的菜单中选择【属性】, 选择【兼容性】项,并勾选【以管理员身份运行此程序】就ok了。简单吧 

        第二种、也算简单,不过我们就要重新生成软件了。首先、在程序中加入MANIFEST资源,右击工程在菜单->【属性】->【安全性】,在界面中勾选【启用ClickOnce安全设置】,在项目的Properties下就有自动生成app.manifest文件。

        文件内容如下:

<? xml version = " 1.0 " encoding = " utf-8 " ?>
< asmv1:assembly manifestVersion = " 1.0 " xmlns = " urn:schemas-microsoft-com:asm.v1 " xmlns:asmv1 = " urn:schemas-microsoft-com:asm.v1 " xmlns:asmv2 = " urn:schemas-microsoft-com:asm.v2 " xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance " >
< assemblyIdentity version = " 1.0.0.0 " name = " MyApplication.app " />
< trustInfo xmlns = " urn:schemas-microsoft-com:asm.v2 " >
< security >
< requestedPrivileges xmlns = " urn:schemas-microsoft-com:asm.v3 " >
<!-- UAC 清单选项
如果希望更改 Windows 用户帐户控制级别,请用以下节点之一替换
requestedExecutionLevel 节点。

< requestedExecutionLevel level = " asInvoker " uiAccess = " false " />
< requestedExecutionLevel level = " requireAdministrator " uiAccess = " false " />
< requestedExecutionLevel level = " highestAvailable " uiAccess = " false " />

如果您希望利用文件和注册表虚拟化提供
向后兼容性,请删除 requestedExecutionLevel 节点。
-->
< requestedExecutionLevel level = " asInvoker " uiAccess = " false " />
</ requestedPrivileges >
< applicationRequestMinimum >
< defaultAssemblyRequest permissionSetReference = " Custom " />
< PermissionSet class = " System.Security.PermissionSet " version = " 1 " Unrestricted = " true " ID = " Custom " SameSite = " site " />
</ applicationRequestMinimum >
</ security >
</ trustInfo >
</ asmv1:assembly >

 把 <requestedExecutionLevel level="asInvoker" uiAccess="false"/> 的 asInvoker 改为"requireAdministrator"。重新编译一下就ok了。

看到这个了吧!

这就是UAC(用户帐户控制)了

  <!-- UAC 清单选项
            如果希望更改 Windows 用户帐户控制级别,请用以下节点之一替换 
            requestedExecutionLevel 节点。

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            如果您希望利用文件和注册表虚拟化提供
            向后兼容性,请删除 requestedExecutionLevel 节点。
        -->

还有其他的方法。不过上面两种比较简单...。

转载于:https://www.cnblogs.com/jasonxuvip/archive/2011/06/20/2085567.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值