首页 > 解决方案 > 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);

标签: c++windows

解决方案


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

明确地修复、使用std::wstring和发挥作用。W

抛开 Unicode 考虑,您不能将 aconst char *用作接收数据的缓冲区。您必须首先为缓冲区分配足够的内存。


推荐阅读