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: 6380
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: 6380
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: 6380
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: 6380
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