c++ - C ++ Windows无法将程序添加到启动中
问题描述
我正在使用此功能将我的程序添加到启动中。但它不起作用,我不知道为什么奇怪的 ascii 字符和单词会出现在启动应用程序中。我究竟做错了什么?
相反,这被添加到启动中。U㫅萹㐀蠀渐晁Ɉ
U㫆萺㝈耀
U㫆萺㝈耀
和C
。其中没有文件位置,也没有详细信息。
HKEY NewVal;
char loggeduser[UNLEN + 1];
std::ostringstream fileinhome;
GetUserNameA(loggeduser, &len);
fileinhome << "C:\\Users\\" << loggeduser << "\\AppData\\Roaming\\snetwork\\snetwork.exe";
std::string fp = fileinhome.str();
const char* file = fp.c_str();
if (RegOpenKey(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), &NewVal) != ERROR_SUCCESS)
{
return;
}
if (RegSetValueEx(NewVal, _T("CLI-Social-Network"), 0, REG_SZ, (LPBYTE)file, sizeof(file)) != ERROR_SUCCESS)
{
return;
}
else {
// std::cout << "Program added to Startup.\n";
// Do nothing, Program was added to Startup
}
RegCloseKey(NewVal);
解决方案
一种可能性:您已经UNICODE
和/或已_UNICODE
定义,RegSetValueEx
实际上也是如此RegSetValueExW
。因此,此函数将 Unicode 数据传递到缓冲区file
。Butfile
是一个 ASCII 缓冲区,因此原本有效的 Unicode 数据被错误地解析为 ASCII,从而导致奇怪的输出。
明确地修复、使用std::wstring
和发挥作用。W
抛开 Unicode 考虑,您不能将 aconst char *
用作接收数据的缓冲区。您必须首先为缓冲区分配足够的内存。
推荐阅读
- python - PyCall 在 Julia 中找不到 scipy
- momentjs - 时刻格式复杂日期
- python - 我如何在 tkinter 中创建新文本而不仅仅是创建一个
- javascript - 函数返回 false 但我需要为什么返回 true 反应原生
- algorithm - 寻找在排序范围内插入新元素的位置
- perl - agl 构建在“recipe perl-native-5.24.4-r0: task do_configure:”中失败
- swift - SwiftUI x ContactsUI,将联系人添加到组
- python - 逐个遍历目录,一次上传一个文件
- javascript - 根据查询更改中的文档最小化 UI 更改
- java - Dom 解析器并发访问安全吗?爪哇