Newsgroup: it.comp.programmare.win32
Titolo: Inno Setup e privilegi di amministrazione

Ho realizzato il mio primo setup con My Inno Setup Extensions (prima
utilizzavo altri tool) e devo dire che mi piace molto. Non so però se
lo script è corretto o ci sono errori (che ad esempio non facciano
funzionare il programma su qualche versione di Windows); questo è lo
script completo:
----------------------------------------------------------
[Setup]
SourceDir=.\data
AppName=xxx
AppVerName=xxx 0.1
DefaultDirName={pf}\xxx
DefaultGroupName=xxx
UninstallDisplayIcon={app}\xxx.exe
Compression=bzip/9
OutputBaseFilename=..\xxx setup
OutputDir=.
AdminPrivilegesRequired=yes
LicenseFile=license.txt
[Files]
Source: "xxx.exe"; DestDir: "{app}"
Source: "xyz.exe"; DestDir: "{app}"
Source: "license.txt"; DestDir: "{app}"
Source: "src\*"; DestDir: "{app}\src"
Source: "cygwin1.dll"; DestDir: "{sys}"; Flags: sharedfile
[Icons]
Name: "{group}\xxx"; Filename: "{app}\xxx.exe"
Name: "{group}\license"; Filename: "{app}\license.txt"
Name: "{group}\Uninstall xxx"; Filename: {uninstallexe}
----------------------------------------------------------
Ci sono errori?
Lo script sul mio PC (winXP) si comporta correttamente tranne per i
privilegi di amministratore; se l'utente non ha i privilegi necessari
l'installazione si blocca, io preferirei che mi venisse mostrata una
finestra di dialogo per cambiare utente, come quella che viene creata
automaticamente da WinXP se il file si chiama setup.exe. È possibile
ottenere ciò con uno script o con una dll esterna?
-- 
Marco Barisione (ICQ 84277092)

ottenere ciò con uno script o con una dll esterna?
Visto che nessuno mi ha risposto modifico un po' la domanda:
È possibile con qualche API far apparire la finestra per cambiare
l'utente?


 l'utente?
Non credo che si possa cambiare utente al volo durante l'esecuzione di
un processo, pero` potresti usare CreateProcessAsUser() in modo creativo
(presumo che Windows XP usi quella).
--
Lorenzo

(presumo che Windows XP usi quella).
Grazie, pensavo che fosse piů semplice e si potesse richiamare qualche
API. Cosě invece devo ridisegnare la gui e questo implica creare un
dll appostia visto non penso sia possibile farlo direttamente da Inno
Setup. Inoltre non otterrei mai una GUI esattamente uguale a quella
del sistema in uso, mentre a me piace avere applicazioni il piů
"native" possibili. Alla fine ne farň a meno.


l'utente?
l'API che cerchi e' ExitWindowsEx
prova lo script ISX qua sotto !
Alla partenza del setup vede se l'utente e' administrator, se non lo
e' chiede se si vuole fare logoff, e se si risponde si' fa logoff.
Ti piace ?
ciauz
;
; Vincenzo Giordano
;
; ISX 3.0.2
; 
[Setup]
AppName=LogOff
AppVerName=LogOff
Uninstallable=false
UpdateUninstallLogAppName=false
DisableDirPage=false
DisableProgramGroupPage=true
DefaultDirName={pf}\LogOff
DisableStartupPrompt=true
[_ISTool]
EnableISX=true
[Code]
function ExitWindowsEx(
	uFlags: Longint;
	dwReserved: LongInt ) : Integer;
external 'ExitWi...@user32.dll stdcall';
{ // API declaration in C
BOOL ExitWindowsEx(
  UINT uFlags,       // shutdown operation
  DWORD dwReserved   // reserved
);
}
// from winuser.h
const EWX_LOGOFF = 0;
const EWX_SHUTDOWN = 1;
const EWX_REBOOT = 2;
const EWX_FORCE = 4;
const EWX_POWEROFF = 8;
function GetLastError( ) : Integer;
external 'GetLas...@kernel32.dll';
function InitializeSetup(): Boolean;
var answ: Integer; CrLf: String;
    ercode: Integer;
begin
  Result := true;
  CrLf := #13#10;
  // if is nt alogged on an Admin ask if wants logoff
  if not IsAdminLoggedOn then
  begin
    // anyway cannot continue setup
    Result := false;
    answ := MsgBox( 'User logged on is not an Administrator, please
logoff and logon as administrator.' +
      CrLf + 'Do you want lo logoff now ?', mbConfirmation, MB_YESNO
);
    if answ = IDYES then
    begin
      answ := ExitWindowsEx( EWX_LOGOFF, 0 );
      // if answ is 0 Exitwindows had erros so show error message
      if answ = 0 then
      begin
        ercode := GetLastError();
        MsgBox( 'Logoff error' + CrLf +
          IntToStr(ercode) + ':' + SysErrorMessage( ercode ), mbError,
MB_OK );
      end;
    end;
  end;
end;
Vincenzo 'lo sciamano'   Bologna (ITALIA-ITALY)
Homepage  
http://www.geocities.com/vincesalsero/
Membro Fondatore del CSM (Club Seghe Mentali)
http://www.seghementali.org

prova lo script ISX qua sotto !
Naturalmente con My Inno Setup Extension e non con il semplice Inno
Setup.
http://www.wintax.nl/isx/
Paolo

Ti piace ?
Forse non mi sono spiegato bene, mi riferivo alla finestra
http://spazioinwind.libero.it/marcobari/tmp/utente.jpg
 che non so da
che versione di win nt esista.
Quindi penso non userò il tuo codice ma mi è comunque molto utile
perché mi dà idee interessanti su come fare alcune cose con ISX.


On Wed, 18 Sep 2002 04:05:30 GMT, 
pop...@REMOVE.yahoo.com
 (Goodidea)
wrote:

beh, nel primo post Marco diceva che stava usando My Inno Setup
Extension quindi sono andato sul sicruo :)
ciauz



ok, ho aggiunto lo script alla knoledge base di ISX 
http://www13.brinkster.com/vincenzog
ciauz


logon non e' administrator e lanci un setup.exe.
Sì, è così, dipende dal nome. Solo che da quanto ho capito lo fa solo
se il file si chiama setup.exe.
-- 
Marco Barisione (ICQ 84277092)