Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it L'avatar di Salvy95
    Registrato dal
    Jul 2008
    Messaggi
    199

    [C] problema nella creazione di un servizio

    salve ragazzi, vorrei aggiungere il mio programma alla lista dei servizi!
    ho scritto questo codice ma gli handle non restituiscono alcun valore:

    codice:
    		BOOL AddAutoStartService(BOOL MsgBox){
    			SC_HANDLE key;
    			SC_HANDLE result;
    			key = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);
    			result = CreateService(key, PROCESSNAME, PROCESSNAME, SC_MANAGER_ALL_ACCESS, SERVICE_ADAPTER, SERVICE_INTERACTIVE_PROCESS, 
    				SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, EXEPATH, NULL, NULL, NULL, NULL);
    			return TRUE;
    		}
    e quindi non succede nulla (Non si aggiungere il servizio aurora alla lista dei servizi) HKEY_LOCAL_MACHINE\System\CurrentControlSet\Servic es

  2. #2
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    mai scritto un servizio, ma in C il tipo primitivo BOOL o bool non esiste, tuttavia una variabile di tipo int con valore settato a 1 può simulare TRUE e se posta a 0 FALSE.

    inoltre se non scrivi come hai definito i tipi credo sia impossibile darti una risposta completa.

    edit: preciso, il tipo bool è definito dal C99 in poi, non è definito in tutte le versioni del linguaggio ma solo in alcune.

  3. #3
    Utente di HTML.it L'avatar di Salvy95
    Registrato dal
    Jul 2008
    Messaggi
    199
    sarà che io utilizzo il visual C++, ma a me bool ha sempre funzionato... non a caso tutte le mie funzioni all'interno del programma ritornano valori booleani!
    temo che il problema sia altrove ç_ç

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    131
    Non hai specificato che errore ti da la chiamata a OpenSCManager e a CreateService..

    A OpenSCManager passa SC_MANAGER_CREATE_SERVICE al posto di SC_MANAGER_ALL_ACCESS, visto che devi solo aggiungere un servizio.

    Alla CreateService perché passi SERVICE_ADAPTER? E' un valore riservato! Passa piuttosto SERVICE_WIN32_OWN_PROCESS.

    Che è SERVICE_INTERACTIVE_PROCESS? Mi sa che ci hai aggiunto un parametro che non richiede..

    Ricontrolla tutti i parametri..

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    131
    Originariamente inviato da Freax
    mai scritto un servizio, ma in C il tipo primitivo BOOL o bool non esiste, tuttavia una variabile di tipo int con valore settato a 1 può simulare TRUE e se posta a 0 FALSE.

    inoltre se non scrivi come hai definito i tipi credo sia impossibile darti una risposta completa.

    edit: preciso, il tipo bool è definito dal C99 in poi, non è definito in tutte le versioni del linguaggio ma solo in alcune.
    Nel header windef.h sono dichiarati:
    codice:
    ...
    ..
    
    #ifndef FALSE
    #define FALSE               0
    #endif
    
    #ifndef TRUE
    #define TRUE                1
    #endif
    
    ...
    ...
    
    typedef int                 BOOL;

  6. #6
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    Originariamente inviato da XAlbeX
    Nel header windef.h sono dichiarati:
    codice:
    ...
    ..
    
    #ifndef FALSE
    #define FALSE               0
    #endif
    
    #ifndef TRUE
    #define TRUE                1
    #endif
    
    ...
    ...
    
    typedef int                 BOOL;
    che non mi risulta sia ancora un header del C ( anzi c'è pure il copyright Microsoft su quel file ), linguaggio per il quale il nostro amico chiede aiuto, o è Visual C++ o è C, mettiamoci d'accordo.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    131
    Beh.. se utilizza le API di Windows penso abbia incluso gli header che mette a disposizione Microsoft.. o no?

  8. #8
    Originariamente inviato da Freax
    che non mi risulta sia ancora un header del C ( anzi c'è pure il copyright Microsoft su quel file ), linguaggio per il quale il nostro amico chiede aiuto, o è Visual C++ o è C, mettiamoci d'accordo.
    È C con le librerie di Windows (roba del Platform SDK), come è chiaro dai tipi e dalle funzioni utilizzate (e dal fatto che vuole creare un servizio, oggetto che il C standard ovviamente non menziona).

    Comunque... dopo aver sistemato i parametri (come specificato correttamente da XAlbeX), inserisci dopo ciascuna chiamata una GetLastError per verificare esattamente quale codice di errore ottieni.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di Salvy95
    Registrato dal
    Jul 2008
    Messaggi
    199
    Ok, adesso funziona ma... una volta creata la chiave nel registro, questa non avvia il programma, è come se l'esecuzione automatica fosse disabilitata!

    Edit: Porto ulteriori info: il servizio compare all'interno della lista dei servizi, ma lo status è quello di "Interrotto"
    Immagini allegate Immagini allegate

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    Originariamente inviato da Salvy95
    Ok, adesso funziona ma... una volta creata la chiave nel registro, questa non avvia il programma, è come se l'esecuzione automatica fosse disabilitata!

    Edit: Porto ulteriori info: il servizio compare all'interno della lista dei servizi, ma lo status è quello di "Interrotto"

    vanno settati i privilegi di esecuzione?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.