c++不能在注册表中创建新键
C++ cannot create new key in registry
我真的需要你的帮助。我什么都试过了,但结果总是一样,什么都没有。请建议。
这是我的代码#include <windows.h>
#include <iostream>
#include <windef.h>
using namespace std;
int main (void)
{
HKEY hKey;
LONG regOpenResult;
const char PATH[] = "C:\Users\les\Documents\visual studio 2010\Projects\registryTester\Debug\registryTester.exe";
RegCreateKeyExW(HKEY_LOCAL_MACHINE,
L"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
0,
NULL,REG_OPTION_VOLATILE,
KEY_SET_VALUE,
NULL,
&hKey,
NULL
);
RegSetValueExW(hKey, L"regTest", 0, REG_SZ, (BYTE*)PATH, strlen(PATH));
RegCloseKey(hKey);
}
您正在使用unicode版本的RegSetValueEx,但传递它一个char*字符串。您应该将PATH的声明更改为:
const wchar_t PATH[] = L"C:\Users\les\Documents\visual studio 2010\Projects\registryTester\Debug\registryTester.exe";
和使用wcslen
代替strlen
,因为它是一个wchar_t字符串。因为它是以字节(而不是字符)为单位测量的,并且需要包含空终止符,所以size参数应该是wcslen(PATH)*2+2
。
检查每个API调用的返回状态!!!!对于每次失败使用GetLastError()。
知道错误应该引导你解决问题。
否则,你就完全瞎了…
是的,如果你调用16位Unicode API, PATH不应该是8位字符串。但这并不是唯一的问题。
是的,如果你使用的是Vista、Windows 7或更高版本,"权限"绝对是一个问题。
相关文章:
- C++:继续创建新的变量可以吗
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 重用对象与创建新对象
- C++,创建新对象时类的对象更改
- 类中的C++映射不会保存新键
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 我可以动态创建新地图并作为函数参数传递吗?
- 插入新键时,它会更改现有键值的地址吗?
- 在C++中创建新的类型特征
- .exe应用程序在windows10中创建新模块时抛出错误,但在windows7中工作正常
- 为什么我的类节点覆盖自身而不是创建新的节点对象
- 从文件中读取多行.txt字符串删除空格并创建新文件进行输出
- 无法在 Visual Studio 中创建新项目
- 使用 OpenCV C++ 每 1 分钟创建新的视频文件
- 在不创建新节点的情况下实现带有映射的trie
- 如何在不创建新配置的情况下对两个不同解决方案使用的一个项目使用不同的 #defines
- 创建新对象并立即为其设置属性时出现编译器错误
- 使用 libgit2 从另一个分支创建新的 git 存储库?
- EclipseCDT-键盘快捷键或插件,用于从编译错误中创建新的类和方法
- c++不能在注册表中创建新键