Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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 :(


I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L'insieme dei due costituisce una forza incalcolabile. [Albert Einstein]
http://adf.ly/KNVLD
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
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:


I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L'insieme dei due costituisce una forza incalcolabile. [Albert Einstein]
http://adf.ly/KNVLD
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
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. }



I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L'insieme dei due costituisce una forza incalcolabile. [Albert Einstein]
http://adf.ly/KNVLD
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
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?


I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L'insieme dei due costituisce una forza incalcolabile. [Albert Einstein]
http://adf.ly/KNVLD
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
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\


I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. L'insieme dei due costituisce una forza incalcolabile. [Albert Einstein]
http://adf.ly/KNVLD
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo