C++ OpenKey Windows 7

C++ OpenKey Windows 7,c++,C++,这里出了什么问题?在我的笔记本上工作,但不在我的电脑上。 这两个是64位的,Windows7Ultimate #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { HKEY CH; char File_Name[] = "C:\\Users\\RMS\\Desktop\\M.txt"; if(

这里出了什么问题?在我的笔记本上工作,但不在我的电脑上。 这两个是64位的,Windows7Ultimate

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    HKEY CH;
    char File_Name[] = "C:\\Users\\RMS\\Desktop\\M.txt";

    if(RegCreateKey(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&CH) != 0){
                                             printf("Erro - RegCreateKey\n");
                                             system("PAUSE");
                                              return -1;
   }
    if(RegOpenKey(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&CH) != 0) // Abre a CH "Minha CH"
    {
        printf("Erro - RegOpenKey\n");
        system("PAUSE");
        return -1;
    }
    if(RegSetValueEx(CH,L"My_Value",0,REG_SZ,(LPBYTE) L"C:\\Users\\RMS\\Desktop\\M.txt",40) != 0)
        printf("Erro - RegSetValue\n");
    RegCloseKey(CH);
    printf("\nsucesso !\n");
    system("PAUSE");
    return 0;
}

非常感谢大家

您得到了什么错误

试一试

而不是RegOpenKey,因为它适用于16位windows。

您的问题是HKLM注册表项只能由提升的程序写入,而您的程序没有运行提升的程序。它在一台机器上工作而不是在另一台机器上工作的原因是一台机器的用户访问控制被关闭,而另一台机器没有

如果从提升的命令提示符运行程序,它将正常工作

此外,您使用L表示字符串,但使用带有40个字节的RegSetValueEx调用,如果设置有效,则实际上会切断文本上的M.txt。在初始化.txt文件时,应使用:

TCHAR File_Name[] = L"C:\\Users\\RMS\\Desktop\\M.txt";
然后,对于RegSetValueEx,您可以执行以下操作:

RegSetValueEx(CH,L"My_Value",0,REG_SZ,(LPBYTE) File_Name, sizeof File_Name + sizeof(TCHAR))

这使其成为与文件名相对应的字节数,加上最终的NULL TCHAR。

您得到了什么错误?您的代码没有正确使用该函数。它应该将结果与错误和成功进行比较。它也不尊重UAC,因为在本地管理员或超级用户帐户之外运行时,写入HKLM需要Vista及以上或XP下的管理员权限。使用WinAPI时,请使用上提供的文档,并根据该文档检查返回值。@KenWhite我认为此程序应隐式地向用户发出UAC确认提示,对吗?或者UAC是否要求程序员采取特殊措施来允许这样的事情发生?这取决于具体情况。如果UAC有效,它将虚拟化注册表项,这意味着写操作可能看起来有效,但实际上没有完成。你可以在谷歌上搜索UAC和虚拟化,看看这会对事情产生怎样的影响,以前这里有很多帖子。UAC和受限访问已经有十多年的历史了,所以有很多关于它的文章。对于某些操作,它是隐含的,但对于其他操作,它将失败。有一些API需要特权,但现在我不记得如何。最糟糕的是我没有错误。那么程序输出是什么呢?当出现错误时,所有这些函数都提供信息,您只是不使用它。输出:程序“[3336]autoexe.exe:Native”已退出,代码为0 0x0.0 Erros 0警告!!!我如何执行这个程序管理员!我不太明白这个陈述/问题。
TCHAR File_Name[] = L"C:\\Users\\RMS\\Desktop\\M.txt";
RegSetValueEx(CH,L"My_Value",0,REG_SZ,(LPBYTE) File_Name, sizeof File_Name + sizeof(TCHAR))