C++ 使用cpp向注册表添加值时出现问题
我正在尝试向注册表添加值,以便在系统启动时和在Regedit中执行后运行我的程序<代码>HKEY\U当前用户\软件\ Microsoft\Windows\CurrentVersion\Run 仅为路径“C”的第一个字母 变量wc的输出是正确的路径。C++ 使用cpp向注册表添加值时出现问题,c++,regedit,C++,Regedit,我正在尝试向注册表添加值,以便在系统启动时和在Regedit中执行后运行我的程序HKEY\U当前用户\软件\ Microsoft\Windows\CurrentVersion\Run 仅为路径“C”的第一个字母 变量wc的输出是正确的路径。 C:\Users\Piotrek\source\repos\myprogram\Release\myprogram.exe根据您提供的代码,我猜您的项目使用的是Unicode字符集 表示RegSetValueEx的最后一个参数以字节为单位 cbData lp
C:\Users\Piotrek\source\repos\myprogram\Release\myprogram.exe
根据您提供的代码,我猜您的项目使用的是Unicode字符集
表示RegSetValueEx
的最后一个参数以字节为单位
cbData
lpData参数指向的信息的大小,单位为
字节。如果数据类型为REG_SZ、REG_EXPAND_SZ或REG_MULTI_SZ,
cbData必须包含终止空字符的大小或
人物
所以,改变
result = RegSetValueEx(hkey, _T("sysservice"), 0, REG_SZ, (BYTE*)wc, strlen((const char*)wc));
到
应该有用
编辑:感谢@john的评论,
char*fpath=newchar代码>也是一个错误
考虑使用TCHAR fpath[MAX_PATH]代码>直接。
并且以下代码也需要更改为T字符串函数。strlen((const char*)wc)
由于wc
是宽字符字符串,这将始终返回1,因为每个字符都以null结尾。@user13469033可能不会,因为char*fpath=new char代码>是一个错误,它应该是char*fpath=new char[MAX_PATH+1]代码> @约翰,我会考虑的。谢谢你的建议
result = RegSetValueEx(hkey, _T("sysservice"), 0, REG_SZ, (BYTE*)wc, strlen((const char*)wc));
result = RegSetValueEx(hkey, _T("sysservice"), 0, REG_SZ, (BYTE*)wc, (_tcslen(wc) + 1) * sizeof(TCHAR));