-
Autostart per Registry
Hallo, ich versuche gerade per C/C++ Programm einen Eintrag in der Registry zu ersellen. Das Grundgerüst habe ich von einem Mitschüler bekommen, jedoch funktioniert das Ganze bei mir nicht. Da die SuFu nichts gefundne hat hab ich beschlossen mal direkt zu fragen was ich falsch gemacht habe:
Code:
#include <iostream>
#include <windows.h>
#include <string.h>
using namespace std;
int main(void) //int argc,char *argv[]
{ char reg_path[MAX_PATH]={0};
BYTE cString[]="Test1";
int error=0;
HKEY hKey;
HKEY hKey_M = HKEY_LOCAL_MACHINE;
strcpy(reg_path,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
char c;
int i=-1;
do
{
i++;
if(reg_path[i]=='\\' || reg_path[i]==0)
{
c=reg_path[i];
reg_path[i]=0;
if(RegCreateKeyEx(hKey_M,reg_path,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0)!=ERROR_SUCCESS)
{
error+=1;
}
reg_path[i]=c;
}
}while(reg_path[i]!=0);
if(RegSetValueEx(hKey,"EintragsName",0,REG_SZ,cString,6+1) !=ERROR_SUCCESS)
{
error+=3;
}
RegCloseKey(hKey);
system("PAUSE");
return error;
}
Noch sieht der Code ziemlich wild aus, also bitte nicht wundern :)
-
Klappt alles. Landet in HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curr entVersion\Run.
Vielleicht hast du es nicht als Admin ausgeführt.
-
Oder HKEY_CURRENT_USER statt HKEY_LOCAL_MACHINE benutzen.
Dann wird zwar der Eintrag zwar nur für den aktiven User angelegt, aber es klappt auch ohne Admin Rechte.
-
Das Ausführen mit Administrationsrechten habe ich eigentlich auch versucht, funktioniert hat es aber nicht. Der Eintrag in HKEY_CURRENT_USER funktioniert bei mir jetzt (auch ohne Admin-Rechte).
Danke für die Hilfe!
So, hier nochmal das ganze in aufgeräumter Form für alle die das auch noch brauchen:
Code:
#include <windows.h>
#include <string.h>
#include <stdio.h>
using namespace std;
int main(int agvc, char *argv[])
{
char reg_path[MAX_PATH]={0};
char name[100];
BYTE cString[100];
int error=0;
HKEY hKey;
HKEY hKey_M = HKEY_CURRENT_USER;
strcpy(reg_path,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
if(argv[1])strcpy(name,argv[1]);
if(argv[2])strcpy((char*)cString,argv[2]);
char c;
int i=-1;
do
{
i++;
if(reg_path[i]=='\\' || reg_path[i]==0)
{
c=reg_path[i];
reg_path[i]=0;
if(RegCreateKeyEx(hKey_M,reg_path,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0)!=ERROR_SUCCESS)
{
error+=1;
}
reg_path[i]=c;
}
}while(reg_path[i]!=0);
if(RegSetValueEx(hKey,name,0,REG_SZ,cString,strlen((const char*)cString)+1) !=ERROR_SUCCESS)
{
error+=1;
}
RegCloseKey(hKey);
return error;
}
Übergeben werden Eintragsname und Pfad (jeweils mit \\). Ich hoffe es hilft irgendjemandem :)
-
trotzdem brauchst du dafür ab vista ne bestltigung vom user das ein autostart erzeugt werden darf.
-
Ich verwende Windows 7 und es funktioniert ohne Administratorrechte oder nerviges OK-drücken. Hast du ev. was umgestellt? Bei Win7 kann man die Sicherheitsstufe erhöhen, vll. geht das unter Vista auch.
-
mhhh war der meingung das ich früher dafür immer mein ok geben musste und es deshalb immer wieder unter runonce gelegt hab. Sry