Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Avvio programma all'accesso di Windows
Forum - C/C++ - Avvio programma all'accesso di Windows

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Jake7zDunn (Normal User)
Rookie


Messaggi: 30
Iscritto: 24/07/2012

Segnala al moderatore
Postato alle 13:48
Giovedì, 12/06/2014
Ho sviluppato un programma in C++ alla quale ho aggiunto la possibilità di farlo partire all'avvio di Windows.
Il problema è che se lo faccio partire manualmente funziona bene mentre all'avvio appare e scompare immediatamente(nel task manager non c'è nemmeno il processo). Premetto che ho fatto anche altre prove come ad esempio metterlo in Esecuzione Automatica ma accade sempre la stessa cosa :(

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:59
Giovedì, 12/06/2014
Ma questo programma cosa fa?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Jake7zDunn (Normal User)
Rookie


Messaggi: 30
Iscritto: 24/07/2012

Segnala al moderatore
Postato alle 14:39
Giovedì, 12/06/2014
In pratica è una rudimentale chat su console formata da un eseguibile per aggiornare e un eseguibile per la chat.
All'avvio dovrebbe partire l'updater che controlla se ci sono aggiornamenti e poi fa partire la chat.
I due eseguibili sono applicazioni console che ho compilato con gnu g++ con l'aiuto delle librerie cURL per inviare e ricevere attraverso http.

Il fatto è che non mi riesco a spiegare che cosa accade quando lo faccio partire in avvio automatico perché se lo apro io funziona :noway:

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:54
Giovedì, 12/06/2014
Probabilmente il primo eseguibile non trova il secondo (quando è in esecuzione automatica).

Mostraci il codice del primo eseguibile ...

Ultima modifica effettuata da nessuno il 12/06/2014 alle 14:55


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Jake7zDunn (Normal User)
Rookie


Messaggi: 30
Iscritto: 24/07/2012

Segnala al moderatore
Postato alle 15:28
Giovedì, 12/06/2014
Codice sorgente - presumibilmente C++

  1. #include <string>
  2. #include <fstream>
  3. #include <curl/curl.h>
  4.  
  5. #define URL_BASE "http://localhost/"
  6. #define URL_CHECK URL_BASE "chat/version.php"
  7. #define URL_UPDATE   URL_BASE "chat/chat.exe"
  8. #define OUTPUT_FILE "chat.exe"
  9. #define NO_INTERNET "NOINTERNETCONNECTION"
  10.  
  11. using namespace std;
  12.  
  13. string currentversion;
  14.  
  15. static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
  16. {
  17.         ((std::string*)userp)->append((char*)contents, size * nmemb);
  18.         return size * nmemb;
  19. }
  20.  
  21. string getData(char *URL){
  22.         CURL *curl;
  23.         CURLcode res;
  24.         std::string readBuffer;
  25.  
  26.         curl = curl_easy_init();
  27.         if(curl) {
  28.                 curl_easy_setopt(curl, CURLOPT_URL, URL);
  29.                 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
  30.                 curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
  31.                 res = curl_easy_perform(curl);
  32.                 curl_easy_cleanup(curl);
  33.                 if (res != CURLE_OK){
  34.                         return NO_INTERNET;
  35.                 }
  36.                 return readBuffer;
  37.         }
  38.         return "";
  39. }
  40.  
  41. int CheckUpdate(void){
  42.         fstream file;
  43.         file.open("version.txt");
  44.  
  45.         string localversion;
  46.         file >> localversion;
  47.  
  48.         file.close();
  49.  
  50.         currentversion = getData(URL_CHECK);
  51.        
  52.         if (currentversion != NO_INTERNET && currentversion != localversion){
  53.                 return 1;
  54.         }
  55.         return 0;
  56. }
  57.  
  58. void Update(void){
  59.         string Buffer = getData(URL_UPDATE);
  60.         if(Buffer != NO_INTERNET){
  61.                 ofstream file(OUTPUT_FILE, fstream::out | fstream::trunc);
  62.                 file << Buffer << std::endl;
  63.                 file.close();
  64.                 file.open("version.txt");
  65.                 file << currentversion;
  66.                 file.close();
  67.         }
  68. }
  69.  
  70. void Start(char *Application){
  71.         STARTUPINFO         siStartupInfo;
  72.         PROCESS_INFORMATION piProcessInfo;
  73.  
  74.         memset(&siStartupInfo, 0, sizeof(siStartupInfo));
  75.         memset(&piProcessInfo, 0, sizeof(piProcessInfo));
  76.  
  77.         siStartupInfo.cb = sizeof(siStartupInfo);
  78.  
  79.     if(CreateProcess(Application,        //eseguibile
  80.                      "",                 //Args
  81.                      0,
  82.                      0,
  83.                      FALSE,
  84.                      CREATE_DEFAULT_ERROR_MODE,
  85.                      0,
  86.                      0,                              // Working directory
  87.                      &siStartupInfo,
  88.                      &piProcessInfo) == FALSE);
  89. }
  90.  
  91. int main(void){
  92.         if (CheckUpdate() == 1){
  93.                 Update();
  94.         }
  95.         Start("chat.exe");
  96.  
  97.         return 0;
  98. }


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:41
Giovedì, 12/06/2014
Solo per provare il mio dubbio, ricompila indicando la directory assoluta

Start("C:\\cartella1\\cartella2\\chat.exe");




Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Jake7zDunn (Normal User)
Rookie


Messaggi: 30
Iscritto: 24/07/2012

Segnala al moderatore
Postato alle 18:08
Giovedì, 12/06/2014
Si, serviva la directory assoluta! grazie per la dritta :k:
Per curiosità, perché gli programmi in esecuzione automatica non vengono eseguiti nelle loro rispettive directory?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:51
Giovedì, 12/06/2014
Ma tu come avevi organizzato i due eseguibili? Dove stavano?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Jake7zDunn (Normal User)
Rookie


Messaggi: 30
Iscritto: 24/07/2012

Segnala al moderatore
Postato alle 19:20
Giovedì, 12/06/2014
I due eseguibili stanno nella stessa directory C:\projects\MyChat\bin\

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo