C ++ Windows无法将程序添加到启动

时间:2019-08-29 15:29:26

标签: c++ windows

我正在使用此功能将程序添加到启动中。但这不起作用,我也不知道为什么奇怪的ascii字符和单词会出现在启动应用程序中。我在做什么错了?

而是将其添加到starup。 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);

1 个答案:

答案 0 :(得分:1)

一种可能性:您定义了UNICODE和/或_UNICODE,因此RegSetValueEx实际上是RegSetValueExW。因此,此函数将Unicode数据传递到缓冲区file中。但是file是ASCII缓冲区,因此,否则有效的Unicode数据被错误地解析为ASCII,从而导致输出奇怪。

要解决此问题,请显式使用std::wstringW函数。

Unicode方面的考虑外,您不能使用const char *作为接收数据的缓冲区。您必须先为缓冲区分配足够的内存。