PDA

View Full Version : [C/windows]programma non si avvia...


$te
16-01-2008, 09:25
ho un programma ke ha questo percorso WINDOWS/system33/programma.exe
questo mio programma si avvia appena acceso il pc (l'ho inserito nel registro d windows). il problema ke nn si avvia! ho provato quindi a fare un semplice programma ke dopo 1min avvii quel programma, solo ke nn so come mai nn lo trova all'avvio! se invece dopo ke il pc é acceso lo avvio, mi trova il programma (WINDOWS/system33/programma.exe) senza problema, come mai?
grazie

IceCoder
16-01-2008, 12:17
ho un programma ke ha questo percorso WINDOWS/system33/programma.exe
questo mio programma si avvia appena acceso il pc (l'ho inserito nel registro d windows). il problema ke nn si avvia! ho provato quindi a fare un semplice programma ke dopo 1min avvii quel programma, solo ke nn so come mai nn lo trova all'avvio! se invece dopo ke il pc é acceso lo avvio, mi trova il programma (WINDOWS/system33/programma.exe) senza problema, come mai?
grazie

windows non riconosce gli slash, ma solo i backslash.

71104
16-01-2008, 12:19
se nel valore della chiave di registro HKLM\..\Run hai messo un path come quello che hai scritto allora non me ne stupisco: manca la lettera dell'unità disco.

PS: vorresti fare a tutto il forum il grandissimo piacere di scrivere in italiano?

71104
16-01-2008, 12:19
windows non riconosce gli slash, ma solo i backslash. questa poi... :asd:

IceCoder
16-01-2008, 12:24
questa poi... :asd:

perchè? a me non li legge O.o

EDIT: che pessima figura :nono: se metti l'unità li legge :|

71104
16-01-2008, 12:24
perchè? a me non li legge O.o cosa, di preciso, "non te li legge"?

IceCoder
16-01-2008, 12:27
cosa, di preciso, "non te li legge"?

intendevo gli slash :asd: poi però mi sono accorto che se invece metto anche l'unità li legge :D

vado a sotterrarmi la testa da qualche parte :banned:

$te
16-01-2008, 13:45
se nel valore della chiave di registro HKLM\..\Run hai messo un path come quello che hai scritto allora non me ne stupisco: manca la lettera dell'unità disco.

PS: vorresti fare a tutto il forum il grandissimo piacere di scrivere in italiano?

certo ke ho messo l'unità disco.
xké? nn scrivo in italiano??
Il problema forse ke nn avete capito, é ke se lancio il programma1 (quello ke semplicemnte lancia il programma2 nel path Windows..) funziona, ma quando accendo il pc e il programma1 si avvia, non trova il file .exe del programma2! sembra ke li venga negato l'accesso

71104
16-01-2008, 13:50
xké? nn scrivo in italiano?? decisamente no. scusa se sto pesantemente violando la netiquette ma lo faccio nel tuo interesse (ti chiedo di scrivere in maniera comprensibile affinché io possa aiutarti :D).

Il problema forse ke nn avete capito, ah adesso siamo noi che non capiamo... :rolleyes:
no dai, sinceramente, ritieni veramente di scrivere in maniera corretta? sia grammaticalmente che ortograficamente.

é ke se lancio il programma1 (quello ke semplicemnte lancia il programma2 nel path Windows..) funziona, ma quando accendo il pc e il programma1 si avvia, non trova il file .exe del programma2! sembra ke li venga negato l'accesso posta il codice del programma1 allora (se ho capito bene :mbe: visto che di italiano qui neanche l'ombra).

$te
16-01-2008, 14:21
la prossima volta chiamo dante per rispondere.
Si vede che mi sono espresso male, allora:
nella chiave di registro, ho aggiunto il mio programma1, cosi quando avvio il pc, il programma1 si avvia automaticamente.
Il programma1 fa semplicemente questo:

#include <windows.h>
#include <io.h>
#include <stdio.h>



using namespace std;

int main(int argc, char *argv[])
{

HWND stealth; /*creating stealth */
AllocConsole();

stealth=FindWindowA("ConsoleWindowClass",NULL);

ShowWindow(stealth,0);

chdir("WINDOWS/system33");

Sleep(60000);

STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory (&si,sizeof(STARTUPINFO));

si.cb = sizeof (STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;

if((CreateProcess(NULL, "skwindm.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))==0)
{
ShowWindow(stealth,1);

printf("smip kill messenger non trovato\n\n");

system("pause");

}

return EXIT_SUCCESS;
}


il problema é appunto che viene visualizzato: smip kill messenger non trovato.
Eppure, se quando il pc é gia in funzione, avvio il programma1 (che mi ripeto, avvia semplicemente il programma2) in questo caso il programma2 si avvia, viene quindi trovato.
Quindi: come mai all'avvio di windows Xp, il programma1 non trova il programma2, cosa che invece funziona se avvio manualmente il programma1.
Mi sono spiegato ora? se no correggetemi pure...sono svizzero, non parlo l'italiano ma lo svizzero

vizzz
16-01-2008, 15:10
uhmmm system33?

IceCoder
16-01-2008, 15:35
uhmmm system33?

*

71104
16-01-2008, 18:11
la prossima volta chiamo dante per rispondere. ai tempi di Dante l'Italia non esisteva neanche

nella chiave di registro, ho aggiunto il mio programma1, cosi quando avvio il pc, il programma1 si avvia automaticamente. grazie per l'evidente sforzo, ma avrei ancora da obiettare circa un certo eccesso di virgole :Prrr:
la prima e terza virgola vanno tolte.

Il programma1 fa semplicemente questo: ti ho messo in evidenza alcuni errori

#include <windows.h>
#include <io.h>
#include <stdio.h>



using namespace std; /* inutile: non hai incluso nessun header C++ e non stai usando nessuna feature del namespace std */

int main(int argc, char *argv[])
{

HWND stealth; /*creating stealth */
AllocConsole();

stealth=FindWindowA("ConsoleWindowClass",NULL);
/* doppio errore: non controlli il valore di ritorno, e in più non conviene programmare in ANSI su Win32 ma sempre in Unicode, oppure in modalità di portabilità compilando con Unicode quando possibile (cioè sempre) */

ShowWindow(stealth,0);
/* non capisco perché vorresti visibilizzare una arbitraria finestra di console: sei consapevole che FindWindow trova finestre in tutto il desktop, e non solo nel tuo programma? :)
inoltre evita di usare i valori numerici delle costanti simboliche; usa i valori letterali: http://msdn2.microsoft.com/en-us/library/ms633548.aspx
*/

chdir("WINDOWS/system33");
/* e poi dice che aveva messo la lettera dell'unità disco... se non la mette neanche nel codice */

Sleep(60000);

STARTUPINFO si;

PROCESS_INFORMATION pi;

ZeroMemory (&si,sizeof(STARTUPINFO));

si.cb = sizeof (STARTUPINFO);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;

if((CreateProcess(NULL, "skwindm.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))==0)
{
ShowWindow(stealth,1);

printf("smip kill messenger non trovato\n\n");

system("pause");

}

return EXIT_SUCCESS;
}
per il resto per capire il problema basta che vedi il valore di ritorno di GetLastError non appena fallisce la CreateProcess. a proposito, se proprio vuoi programmare in ANSI dovresti usare CreateProcessA.

Mi sono spiegato ora? se no correggetemi pure...sono svizzero, non parlo l'italiano ma lo svizzero :mbe: ti propongo l'idea di postare in forum svizzeri :fagiano:

$te
16-01-2008, 19:17
chdir("WINDOWS/system33");
/* e poi dice che aveva messo la lettera dell'unità disco... se non la mette neanche nel codice */

il programma é nell'unità di disco, quindi non c'é bisogno di specificarlo. Capisco i problemi che mi ha evidenziato, pero il mio problema principe é: perché se lo avvio manualmente funziona, ma non se viene avviato all'avvio di XP?

(perché dante non parla in italiano? mi pare che l'abbia levigato/inventato lui:P)

no pf...non mandarmi in forum svizzeri!!! (non lo palleggio cosi tanto il tedesco:P)

il problema non puo sorgere dal fatto che il file .exe si trova nella cartella WINDOWS?

grazie

71104
16-01-2008, 20:17
chdir("WINDOWS/system33");
/* e poi dice che aveva messo la lettera dell'unità disco... se non la mette neanche nel codice */

il programma é nell'unità di disco, quindi non c'é bisogno di specificarlo. sai quanti altri files che ci sono nelle mie unità disco... eppure quando tento di aprirli con CreateFile mi è sempre necessario specificare la lettera dell'unità.

Capisco i problemi che mi ha evidenziato, pero il mio problema principe é: perché se lo avvio manualmente funziona, ma non se viene avviato all'avvio di XP? arileggi: ti ho detto di usare la GetLastError. e comunque io farei anche un pensierino circa il passare un path valido alla chdir.

(perché dante non parla in italiano? mi pare che l'abbia levigato/inventato lui:P) ??? cioè a te quello che c'è scritto nella Divina Commedia sembra italiano??

no pf...non mandarmi in forum svizzeri!!! (non lo palleggio cosi tanto il tedesco:P) ecco l'errore: non ci devi mica "palleggiare" con le lingue :asd: altrimenti parli come Totti :huh:

(ok questa faceva cagare :asd: )

il problema non puo sorgere dal fatto che il file .exe si trova nella cartella WINDOWS? parlando così, in generale e senza poter mettere mano sul tuo PC, l'unico possibile ostacolo che riesco a vedere è l'access check: potresti non avere i permessi se usi un LUA. ma sono castelli in aria perché l'unica cosa che devi fare è vedere il valore di ritorno della GetLastError.