Dienst-Programm kann keine Registry Einträge verändern?

PowerAzor

Grünschnabel
Hi,
wie verändere ich mit einem von mir geschriebenen Programm, welches als Dienst läuft, Registry Einträge?
Im folgenden Code des Diensts wird das die Datei "test.txt" erstellt, jedoch der Registry Eintrag, den ich eigentlich verändern will bleibt unverändert. Die Datei habe ich nur zum testen des Diensts erstellt (der ja somit funktioniert).

Code:
void WINAPI ServiceMain( DWORD /*argc*/, TCHAR* /*argv*/[] )
{
	// initialise service status
	serviceStatus.dwServiceType = SERVICE_WIN32;
	serviceStatus.dwCurrentState = SERVICE_STOPPED;
	serviceStatus.dwControlsAccepted = 0;
	serviceStatus.dwWin32ExitCode = NO_ERROR;
	serviceStatus.dwServiceSpecificExitCode = NO_ERROR;
	serviceStatus.dwCheckPoint = 0;
	serviceStatus.dwWaitHint = 0;

	serviceStatusHandle = RegisterServiceCtrlHandler( gszServiceName, ServiceControlHandler );

	if ( serviceStatusHandle )
	{
		// service is starting
		serviceStatus.dwCurrentState = SERVICE_START_PENDING;
		SetServiceStatus( serviceStatusHandle, &serviceStatus );

		// Create the Controlling Event here
		ServiceControlEvent = CreateEvent( 0, FALSE, FALSE, 0 );

		// Service running
		serviceStatus.dwControlsAccepted |= (SERVICE_ACCEPT_STOP |
			SERVICE_ACCEPT_SHUTDOWN);
		serviceStatus.dwCurrentState = SERVICE_RUNNING;
		SetServiceStatus( serviceStatusHandle, &serviceStatus );
		
		CRegKey rkDesktop;
		if (rkDesktop.Open(HKEY_CURRENT_USER, _T("Control Panel\\Desktop")) == ERROR_SUCCESS) {
			rkDesktop.SetStringValue(_T("TileWallpaper"), _T("1"));
			rkDesktop.Close();
			FILE* pTestFile;
			fopen_s(&pTestFile, "C:\\test.txt", "w");
			fprintf(pTestFile, "test erfolgreich");
			fclose(pTestFile);
		}

		WaitForSingleObject( ServiceControlEvent, INFINITE );

		// service was stopped
		serviceStatus.dwCurrentState = SERVICE_STOP_PENDING;
		SetServiceStatus( serviceStatusHandle, &serviceStatus );

		// do cleanup here
		CloseHandle( ServiceControlEvent );
		ServiceControlEvent = 0;

		// service is now stopped
		serviceStatus.dwControlsAccepted &= ~(SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN);
		serviceStatus.dwCurrentState = SERVICE_STOPPED;
		SetServiceStatus( serviceStatusHandle, &serviceStatus );
	}
}
Führe ich genau den gleichen Code zum ändern der Registry in einem eigenen/"leeren" Programm aus (nicht als Dienst) so funktioniert er:confused:
Bin hier total verwirrt und hoffe jemand weiß Rat.

Freue mich auf Hilfe,
PowerAzor

P.S. Falls es wichtig ist, ich arbeite hier auf Vista.
 
Zurück