Bonjour,
Malgré le tutoriel de Pascal Fonteneau je me bats encore avec les manifestes.
Objectif : Savoir si mon programme est connecté à Internet et s'il est en relation avec mon serveur de base de données en local (wifi ou RJ45) ou pas
En utilisant Indy et plus particulièrement TidICMPClient j'arrive bien à obtenir les résultats mais pour cela le programme doit être lancé en mode administrateur et, hélas, cela s'affiche (bien sur selon le niveau de l'UAC mais je n'aurais pas toujours la main dessus).
Après avoir lu le tutoriel, j'ai fait une application console dans le but d'y faire appel via la fonction RunasAdmin
environnement de travail : XE8, Programme appelant FMX, WINDOWS 8 , UAC activée (et devant le rester) au niveau "toujours m'avertir" ou "m'avertir quand des applications tentent ..."
le programme console très simple, est appelé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 function RunAsAdmin(hWnd : HWND; aFile : String; aParameters : String) : DWORD; Var Sei : TShellExecuteInfoW; begin Fillchar(sei,SizeOf(sei),0); sei.cbSize := SizeOf(sei); sei.Wnd := hWnd; sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI; sei.lpfile := PChar(aFile); sei.lpVerb := 'runas'; sei.lpParameters := PChar(aParameters); sei.nShow := SW_HIDE; if not ShellExecuteExW(@sei) then RaiseLastOSError else GetExitCodeProcess(Sei.hProcess,result); // en fait je récupère ainsi le résultat end;
cependant c'est toujours pareil à l'exécution j'ai toujours l'affichage d'attention indiquant que le programme va faire "des modifications dans la base de registre"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 program TestConnexion; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, IdIcmpClient, IdBaseComponent, IdComponent, IdRawBase, IdRawClient; function ExecuteProgram : integer; var ICMP : TIdIcmpClient; RC : integer; begin RC:=0; // Program does something ICMP:=TIdIcmpClient.Create(nil); try ICMP.Host:='www.google.com'; ICMP.Ping(); RC:=1; //RC OR 1; ICMP.Host:='xxx.xxx.xxx.xxx'; // je vous cache cette adresse ;) ICMP.Ping(); RC:=RC OR 2; ICMP.Host:='192.168.1.60'; // 1.16 ICMP.Ping(); RC:=RC OR 4; // local finally ICMP.Free; Result:=RC; end; end; begin try ExitCode:=ExecuteProgram; except ExitCode:=-1 end; end.
Comment puis-je m'en passer ! j'ai tenté plusieurs manifestes, celui ci me paraissait le bon , mais pourtant non ! je commence à voir
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="higestAvailable"
/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Partager