2013-09-27 3 views
0

Я написал небольшую программу, которая вставляет значение и соответствующее значение в раздел реестра Windows.автоматически запускать программу при запуске

Программа работает нормально, но не вставляет значение и соответствующее значение.

И еще одна вещь, когда я запускаю prog как администратор, RegSetValueEx() терпит неудачу .. но все же inssert только значение не его данные.

Пожалуйста, помогите найти здесь проблему.

Мой код выглядит следующим образом ..

#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(); 
    } 
+0

Существует большой ответ размещен [здесь] (https://stackoverflow.com/questions/15913202/add-application-to-startup- реестр). –

ответ

0

Добавить программу по следующему пути в Windows XP:

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

+0

Не могу это сделать с помощью реестра .. ?? –

+0

На самом деле мне нужно написать приложение, которое нужно запускать автоматически при входе пользователя в систему ... –

+0

Да, вы можете добавить это с помощью реестра - но ... вы будете запускать приложение хотя бы один раз, как вы ожидаете этого работать - само по себе? – Sadique

0

ли вы попробовать назначая LPBYTE (VAL) переменной темп & используя это? RegSetValueEx ожидает, что буфер в байтах & будет содержать количество байтов в этом буфере. Если LPTSTR определен как Unicode в вашем проекте, то lstrlen (val) вернет длину строки, которая равна половине размера вашего байтового массива.

-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; 
+0

Ваш код не совместим с UNICODE –

+0

Здесь есть отличный ответ https://stackoverflow.com/questions/15913202/add-application-to-startup-registry –

Смежные вопросы