Dans mon programme, je vérifie une clé de registre au démarrage et si cela n'existe pas, j'exécute le fichier REG situé dans le dossier de l'application avec l'aide de la commande shellexecute. Comment puis-je éviter d'obtenir des messages de confince lors de l'exécution de cette commande? Y a-t-il un moyen de faire cela ou selon des raisons de sécurité que ce n'est pas possible? P>
4 Réponses :
Utilisez le commutateur de ligne de commande / S. (Voir http://support.microsoft.com/kb/82821 ) P>
Et comment puis-je le faire à Delphi? Est-ce que j'utilise toujours Shellexecute? Un exemple serait apprécié
Shellexecute fonctionnerait bien. Moi-même que j'utiliserais reg importation code> plutôt que
regedit code>.
lien vers MM cassé, comme il l'utilise pour être
C'est possible. Deux méthodes sont: p>
soit importer silencieusement fichier.reg dans le registre. P>
Cela a fonctionné, sauf qu'il incite maintenant que vous devez être dans des privilèges d'administration, donc autant de nombreuses invites.
Essayez ceci pour importer le * .reg fichier, aussi vous pouvez essayer ce lien unitexregistry.pas P> Cette unité unitexregistry.PAS a des fonctions très utiles pour exporter un fichier de registre et importer silencieusement les exportés *. Fichier REG P> procedure TForm1.Button1Click(Sender: TObject);
var
texpr : TExRegistry;
begin
texpr:=TExRegistry.Create;
texpr.ImportRegFile('c:\myReg.reg');
texpr.Free;
end;
Apparemment, il y a un bogue dans Reg Import - il écrit le message de réussite à STDERR au lieu de stdout.
Le code de référence suivant résout le problème. Le message de réussite est supprimé, mais le message de défaillance est affiché. P>
SET RegError=%TEMP%\RegError.txt REG IMPORT "%Settings.reg%" 2>"%RegError%" && DEL /Q "%RegError%" || @(ECHO Error importing %Settings.reg%: & TYPE "%RegError%" & PAUSE) SET RegError=
Ne pas exécuter le fichier REG. Utilisez directement l'API de registre.
Je suis sûr que le conseil que vous avez donné est précieux, mais pourriez-vous s'il vous plaît expliquer pourquoi je ne devrais pas le faire de cette façon? Et une dernière chose, le fichier de registre que je veux exécuter contient des tonnes d'entrées qui ont été automatiquement insérées par une grille de données de données. Si j'essaie de l'écrire manuellement, ça ne veut pas dire une perte de temps?
Par exemple, comment allez-vous traiter avec le redirecteur de registre sur des systèmes 64 bits?
J'espère que cette clé REG n'est pas dans
hklm code>. Sinon, vous ne pourrez pas l'importer.
En outre, vous aurez besoin de droits d'administration pour exécuter Regedit dans l'environnement UAC. La boîte de dialogue AVERTISSEMENT UAC contemplera certainement, demandant à l'utilisateur de confirmer.
@kobik c'est une autre raison de préférer
reg importer code>
@DavidHeffernan,
reg code> ressemble à un outil désigné pour cette tâche. mais devrait être testé dans le système d'exploitation activé par UAC.
On dirait que votre application permet de définir des clés de registre et des valeurs appartenant à un installateur plutôt que d'exécuter de votre application. Cela évite également les problèmes avec UAC lors de l'appelant
regedit.exe code> ou
reg.exe code>. Si vous avez vraiment besoin de le faire, veuillez utiliser l'API de registre comme souvent Regedit / Reg sont bloquées dans les environnements d'entreprise et même s'ils ne sont pas un moyen de vérifier si cela réussissait ou si vous effectuez une manipulation des erreurs (c'est ce que les API sont pour) .