启动时自动运行程序

时间:2013-09-27 05:48:52

标签: c windows registry

我编写了一个小程序,它将值及其相应的值插入到Windows注册表项中。

程序工作正常,但没有插入值及其相应的值。

当我以管理员身份运行prog时,还有一件事是RegSetValueEx()失败..但仍然只插入值而不是其数据。

请帮助我们找到问题。

我的代码如下..

#define WIN32_LEAN_AND_MEAN
#define WIN32_DEFAULT_LIBS
#ifndef _WIN32_WINNT
#define _WIN32_WINNT (0x0601)
#endif  /* _WIN32_WINNT */
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <tchar.h>
#include <unistd.h>
#include <stdbool.h>

#include<string.h>

    BOOL InstallRunOnStartup()
    {
      HKEY key;

      long result;
      BOOL ret = FALSE;
      LPTSTR val=L"12as3d12";
        LPTSTR a=L"zzz";

      TCHAR szBuf[20];


      result = RegOpenKeyEx(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", NULL, KEY_WRITE | KEY_WOW64_64KEY | KEY_SET_VALUE , &key);
      if (result == ERROR_SUCCESS)
      {

        printf("hi \n");
          if (RegSetValueEx(key, a, 0, REG_SZ,(LPBYTE)val, (DWORD)(lstrlen(val)+1) == ERROR_SUCCESS)){
            printf("success \n");
            ret = TRUE;
          }
            RegCloseKey(key);
      }
      return ret;
    }




    int main()
    {
        InstallRunOnStartup();
        getch();
    }

3 个答案:

答案 0 :(得分:0)

将程序添加到Windows XP中的以下路径:

C:\Documents and Settings\All Users\Start Menu\Programs\Startup

答案 1 :(得分:0)

您是否尝试将LPBYTE(val)分配给临时变量&amp;用那个? RegSetValueEx期望缓冲区以字节为单位。该缓冲区中的字节数。 如果在项目中将LPTSTR定义为Unicode,则lstrlen(val)将返回字符串的长度,该字符串的大小是字节数组的一半。

答案 2 :(得分:-1)

我尝试了一个不同的程序,它有效..

HKEY hMykey; //Handle to your key
    DWORD pDWDisp; // Ignore for this
    LONG lRes; // Test Success
    char prog[] = "\"C:\\a.exe\""; //Key to launch

lRes = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
               "Software\\Microsoft\\Windows\\CurrentVersion\\run",
               0,"Whatever",REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS ,
               NULL,&hMykey,&pDWDisp); // Open a key for edit

if(lRes != ERROR_SUCCESS){
    MessageBox(0,"Error opening key","",MB_OK);
    return false;
    //exit(0);// Shutdown on fail
}

lRes = RegSetValueEx(hMykey,"a",0,REG_SZ,
                   (LPBYTE)prog,strlen(prog)+1);// Add your key value

if(lRes != ERROR_SUCCESS){
    MessageBox(0,"Error saving record","",MB_OK);
    RegCloseKey(hMykey);
    return false;
    //exit(0);// Shutdown on fail
}

MessageBox(0,"Success!! Registry value recorded","",MB_OK);
RegCloseKey(hMykey);
return true;