-1

这里有什么问题?在我的笔记本上工作,但不在我的电脑上。. . 这两个是 64 位的,Windows 7 终极版。

#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;
}

我发现。. . 只是这样做:

    if(RegSetValueEx(CH,L"My_Value",0,REG_SZ,(LPBYTE) L"C:\\Users\\RMS\\Desktop\\M.txt",60) != 0)

非常感谢你们!

4

2 回答 2

3

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

如果您从提升的命令提示符运行程序,它将起作用。

此外,您正在使用L""字符串,但使用RegSetValueEx40 的调用,即 40 bytes,实际上会切断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。

于 2013-10-24T22:41:06.560 回答
-1

你得到什么错误?

尝试

RegOpenKeyEx  

而不是 RegOpenKey,因为那是针对 16 位窗口的。

于 2013-10-24T22:23:21.427 回答