2012-11-16 60 views
0

下面的代码不会写入注册表,我已经在那里,但会与许多其他人一起尝试过。它运行代码并且没有任何回应。它似乎一直工作,直到我检查登记册并没有任何内容。无法写入注册表

我有适当的权限,但我不明白为什么这个关键是如此特别。我可以手动进入并创建它,但我需要这个程序来做到这一点。提前致谢。

string machineName = txtBox.Text; 
RegistryKey subKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, machineName).OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce", true); 
subKey.SetValue("DeltmpfileOnReboot", @"cmd.exe /c RD /S /Q C:\data\tempFolder /f", RegistryValueKind.String); 

找到钥匙......它神奇地出现在HKLM \ SOFTWARE \ Wow6432Node。奇...

编辑发现问题... Write the registry value without redirect in Wow6432Node由Hans第二个答案...顺便它总是愚蠢的东西一样,

+2

运行此代码的帐户是否有权写入该密钥? – Oded

+0

您正在运行的是哪个版本的Windows?你需要提升权限吗? (Vista/7/8) –

+0

很抱歉忘了添加,Windows 7和是的,我作为管理员运行,它有权限。 – Garrett

回答

1

你的做法是错误的。如果你想在重新启动时删除一个文件,最好使用Win32 API MoveFileEx

在这里看到:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365240(v=vs.85).aspx

和:

http://www.pinvoke.net/default.aspx/kernel32.MoveFileEx

您只需设置目标为null,在标志指定MOVEFILE_DELAY_UNTIL_REBOOT

+0

谢谢,但我不能使用 – Garrett

+0

为什么不呢?比试图从注册表中产生命令提示符更好的解决方案? – Lloyd

+0

其实我看到,你正试图在远程机器上做到这一点。 – Lloyd