c#操作win 7レジストリ


ここでC#小列子を話します(達人はここを迂回してください!)、私たちは普段xpで開発しています.しかし、今では多くの開発者もwin 7の下で開発されています.
以下は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; Androidに読み出し構成情報を記録する 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(「バージョン番号」,「v 1.0.0.1」)を実行すると、すべてok!そして喜んでお客様に投げました...考えていない.
ある日、お客様はwin 7システムを交換して、ソフトウェアを運びました.お客様は42番の靴の顔を引っ張って、どのようにソフトウェアがwin 7で運行できなくなったのかと言いました.....問題は前述のとおりです.
解决方法はあります....
ここにいくつか挙げます.
1つ目は、お客様や技術サービススタッフを教えることです.この方法は私たちのコードを修正する必要がありません.これはメリットの一つです.クリックしてください.Exce右クリック
、ポップアップメニューから「プロパティ」を選択し、「互換性」項目を選択し、「管理者としてこのプログラムを実行」にチェックを入れればOKです.簡単でしょう.
2つ目は、簡単ですが、ソフトウェアを再生成します.まず、プログラムにMANIFESTリソースを追加し、右クリックしてメニュー->「プロパティ」->「セキュリティ」を選択し、インタフェースで「ClickOnceセキュリティ設定の有効化」をチェックすると、プロジェクトのPropertiesの下でapp.manifestファイルが自動的に生成されます.
ファイルの内容は次のとおりです.

のasInvokerを"requireAdministrator"に変更します.再コンパイルすればOKです.
これを見たでしょう.
これがUAC(ユーザーアカウント制御)です
<!-- UAC     
                 Windows         ,           
          requestedExecutionLevel   。

      <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
     <span style="color: #ff0000;"><strong> <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" /></strong></span>
      <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

                            
               ,    requestedExecutionLevel   。
      -->

他にも方法があります.でも上の2つは簡単です....