J'ai fait une application et une DLL, qui fonctionnent de cette façon: Je dois enregistrer la DLL. Après avoir enregistré la DLL si je fais un clic droit sur un fichier .exe, le menu pop-up apparaît, et j'ai inséré dans ce menu une ligne ("Start MyApp"), et si je clique là, il devrait démarrer MyApp. MyApp a un paramètre qui est le chemin complet du fichier .exe sélectionné. Après avoir démarré MyApp avec ce chemin, il devrait créer un processus avec CreateProcessWithLogonW(). Cette application lit le nom d'utilisateur, mot de passe et le domaine à partir d'un fichier .ini. Mon problème est qu'après le démarrage de MyApp, il échoue toujours, car il ne trouve pas le fichier ini. Le code d'erreur est: 1 (fonction incorrecte). Si je démarre MyApp manuellement, cela fonctionne correctement.Démarrage d'un programme échoue avec le code d'erreur 1
Est-ce que quelqu'un a une idée pourquoi est-ce, et comment pourrais-je résoudre ce problème?
Merci d'avance!
Kampi
Update1:
Voici le code qui lit le fichier ini.
int main (int argc, char *argv[])
{
int i, slash = 0, j;
char application[size];
wchar_t wuser[65], wdomain[33], wpass[129];
memset(user, 0, sizeof (user));
memset(password, 0, sizeof (password));
memset(domain, 0, sizeof (domain));
file_exists("RunAs.ini");
readfile("RunAs.ini");
....
....
....
}
void file_exists(const char * filename)
{
if (FILE * file = fopen(filename, "r"))
{
fclose(file);
}
else
{
printf("\nCan't find %s!\n",filename);
getch();
exit(1);
}
}//file_exists
void readfile(char * filename)
{
FILE *inifile;
char tmp[256], buf[256], what[128];
int i, j;
inifile = fopen("RunAs.ini", "r");
while (fgets(tmp, sizeof tmp, inifile) != NULL)
{
if (tmp[ strlen(tmp) - 1 ] == '\n')
{
tmp[ strlen(tmp) - 1 ] = '\0';
}//if
memset (buf, 0, sizeof(buf));
for (i = 0; tmp[i]!= '='; i++)
{
buf[i] = tmp[i];
}
buf[i] = '\0';
i++;
// memset (what, 0, sizeof(what));
SecureZeroMemory(what, sizeof(what) * 128);
for (j = 0; i != strlen(tmp); i++)
{
what[j] = tmp[i];
j++;
}
what[j] = '\0';
upcase(buf);
removespace(what);
if (strcmp(buf, "USERNAME") == 0)
{
strcpy(user, what);
}
if (strcmp(buf, "PASSWORD") == 0)
{
strcpy(password, what);
}
if (strcmp(buf, "DOMAIN") == 0)
{
strcpy(domain, what);
}
}//while
fclose (inifile);
}//readfile
Vous devez montrer votre code qui ouvre/lit depuis le fichier ini. Sans cela, vous n'avez fourni aucune information qui vous sera utile pour trouver le problème. –
@Ken: Code posté :) Mais je dois dire, que si je démarre l'application directement, comme "myapp.exe c: \ totalcmd \ totalcmd.exe" que cela fonctionne bien.Il ne fonctionne pas seulement quand je commence à partir du menu contextuel. – kampi