C#アプリを使用してレジストリに書き込もうとしています。
私はここで与えられた答えを使用しています: C#でレジストリに値を書き込む
ただし、何らかの理由でレジストリにキーが追加されません。
私は次のコードを使用しています:
string Timestamp = DateTime.Now.ToString("dd-MM-yyyy");
string key = "HKEY_LOCAL_MACHINE\\SOFTWARE\\"+Application.ProductName+"\\"+Application.ProductVersion;
string valueName = "Trial Period";
Microsoft.Win32.Registry.SetValue(key, valueName, Timestamp, Microsoft.Win32.RegistryValueKind.String);
Application.name
およびApplication.version
「フォルダ」はまだ存在しません。
最初に作成する必要がありますか?
また、64b Winバージョンでテストしているので、追加されたキーのレジストリを確認したい場合は、C:\ Windows\SysWOW64\regedit.exeの32ビットレジストリを特に確認する必要があります。 ?
まず、LocalMachineでキーを編集する場合、管理者権限でアプリケーションを実行する必要があります(CurrentUserを使用する方が安全です。または、インストーラーでキーを作成します)。新しいサブキーを追加するには、キーを編集モード(OpenSubKeyメソッド)でも開く必要があります。コードを確認しましたが、動作します。これがコードです。
RegistryKey key = Registry.LocalMachine.OpenSubKey("Software",true);
key.CreateSubKey("AppName");
key = key.OpenSubKey("AppName", true);
key.CreateSubKey("AppVersion");
key = key.OpenSubKey("AppVersion", true);
key.SetValue("yourkey", "yourvalue");
次のコードを使用して、必要なレジストリキーを作成して開くことができます。
RegistryKey SoftwareKey = Registry.LocalMachine.OpenSubKey("Software",true);
RegistryKey AppNameKey = SoftwareKey.CreateSubKey("AppName");
RegistryKey AppVersionKey = AppNameKey.CreateSubKey("AppVersion");
AppVersionKey.SetValue("yourkey", "yourvalue");
既に存在する場合は書き込みアクセス用のキーを開き、それ以外の場合は作成するため、基本的にすべてのアプリケーション設定にCreateSubKeyを使用できます。最初に作成してから開く必要はありません。 OpenSubKeyは、この場合のように「HKEY_LOCAL_MACHINE\SOFTWARE \」のように、キーがすでに存在することが確実である場合に便利です。
開いてみてくださいHKLM\Software
最初。次に、プログラムのキーを作成してから、バージョンのキーを作成します。ただし、キーはHKLM\software\WOW6432Nodeに配置できます。これをチェックして。
問題は、十分な権限がないことです。ここに私のために働く方法があります:
RegistryKey myKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
myKey = myKey.OpenSubKey(subkey, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl);
if (myKey != null)
{
myKey.SetValue("DefaultPrinterId", ldiPrinters[e.RowIndex].id, RegistryValueKind.String);
myKey.Close();
}
RegistryKey.OpenBaseKeyを使用すると、正しいレジストリを開きます。これは、作成するレジストリのアクセス許可がない場合、別の場所で実行するためです。