C++ 使用cpp向注册表添加值时出现问题

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

我正在尝试向注册表添加值,以便在系统启动时和在Regedit中执行后运行我的程序<代码>HKEY\U当前用户\软件\ Microsoft\Windows\CurrentVersion\Run

仅为路径“C”的第一个字母

变量wc的输出是正确的路径。
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));