Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Ammyy Admin

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

htuos

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Код:
 
#define MyAppName "AmmyyAdmin Setup"
#define MyAppVersion "3.5"
#define MyAppExeName "AA_v3.exe"
 
[Setup]
AppId={{F60BFCDB-3F0B-48A0-B33D-F6198FD8BD08}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\AmmyyAdmin
DefaultGroupName=AmmyyAdmin
OutputDir=.
OutputBaseFilename=AmmyySetup
Compression=lzma
SolidCompression=yes
DisableDirPage=yes
DisableProgramGroupPage=yes
DisableFinishedPage=yes
DisableReadyPage=yes
DisableWelcomePage=yes
 
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
 
[Files]
;Source: ".\contacts3.bin"; DestDir: "{app}"; Flags: ignoreversion
Source: ".\settings3.bin"; DestDir: "{app}"; Flags: ignoreversion
Source: ".\AA_v3.exe"; DestDir: "{app}"; Flags: ignoreversion; BeforeInstall: RemoveAmmyyService; AfterInstall: InstallAmmyyService
 
[Code_]  
 
type
  HANDLE = Cardinal;
 
  SERVICE_STATUS = record
    dwServiceType             : Cardinal;
    dwCurrentState            : Cardinal;
    dwControlsAccepted        : Cardinal;
    dwWin32ExitCode           : Cardinal;
    dwServiceSpecificExitCode : Cardinal;
    dwCheckPoint              : Cardinal;
    dwWaitHint                : Cardinal;
  end;
 
const
  SC_MANAGER_CONNECT        = $0001;
  SC_MANAGER_CREATE_SERVICE = $0002;
  SC_MANAGER_ALL_ACCESS     = $f003f;
 
  SERVICE_CHANGE_CONFIG     = $2;
  SERVICE_QUERY_STATUS      = $4;
  SERVICE_START             = $10;
  SERVICE_STOP              = $20;
  SERVICE_WIN32_OWN_PROCESS = $10;
  SERVICE_AUTO_START        = $2;
  SERVICE_DELETE            = $10000;
  SERVICE_CONTROL_STOP      = $1;
  SERVICE_STOPPED           = $1;
  SERVICE_RUNNING           = $4;
 
function OpenSCManager(lpMachineName, lpDatabaseName: string; dwDesiredAccess: Cardinal): HANDLE; external 'OpenSCManagerW@advapi32.dll stdcall';
function OpenService(hSCManager: HANDLE; lpServiceName: string; dwDesiredAccess: Cardinal): HANDLE; external 'OpenServiceW@advapi32.dll stdcall';
function CloseServiceHandle(hSCObject: HANDLE): boolean; external 'CloseServiceHandle@advapi32.dll stdcall';
function CreateService(hSCManager: HANDLE; lpServiceName, lpDisplayName: string; dwDesiredAccess, dwServiceType, dwStartType, dwErrorControl: Cardinal;  
                       lpBinaryPathName,lpLoadOrderGroup: String; lpdwTagId : Cardinal; lpDependencies, lpServiceStartName, lpPassword :string): Cardinal;  
                       external 'CreateServiceW@advapi32.dll stdcall';
function DeleteService(hService: HANDLE): boolean; external 'DeleteService@advapi32.dll stdcall';
function StartService_(hService: HANDLE; dwNumServiceArgs: Cardinal; lpServiceArgVectors: Cardinal): boolean; external 'StartServiceW@advapi32.dll stdcall';
function ControlService(hService:HANDLE; dwControl: Cardinal; var ServiceStatus: SERVICE_STATUS): boolean; external 'ControlService@advapi32.dll stdcall';
function QueryServiceStatus(hService: HANDLE; var ServiceStatus: SERVICE_STATUS): boolean; external 'QueryServiceStatus@advapi32.dll stdcall';
 
function IsServiceInstalled(ServiceName: string): boolean;
var
  hSCM: HANDLE;
  hService: HANDLE;
begin
  hSCM := OpenSCManager('', 'ServicesActive', SC_MANAGER_CONNECT);
  Result := False;
  if hSCM <> 0 then begin
    hService := OpenService(hSCM,ServiceName, SERVICE_QUERY_STATUS);
    if hService <> 0 then begin
      Result := True;
      CloseServiceHandle(hService);
    end;
    CloseServiceHandle(hSCM);
  end;
end;
 
function InstallService(FileName, ServiceName, DisplayName, Description: string; ServiceType, StartType: Cardinal): boolean;
var
  hSCM: HANDLE;
  hService: HANDLE;
begin
  hSCM := OpenSCManager('', 'ServicesActive', SC_MANAGER_CREATE_SERVICE);
  Result := False;
  if hSCM <> 0 then begin
    hService := CreateService(hSCM, ServiceName, DisplayName, SERVICE_CHANGE_CONFIG, ServiceType, StartType, 0, FileName, '', 0, '', '', '');
    if hService <> 0 then begin
      Result := True;
      if Description<> '' then
        RegWriteStringValue(HKLM,'System\CurrentControlSet\Services' + ServiceName, 'Description', Description);
      CloseServiceHandle(hService);
    end;
    CloseServiceHandle(hSCM);
  end;
end;
 
function RemoveService(ServiceName: string) : boolean;
var
  hSCM: HANDLE;
  hService: HANDLE;
begin
  hSCM := OpenSCManager('', 'ServicesActive', SC_MANAGER_ALL_ACCESS);
  Result := False;
  if hSCM <> 0 then begin
    hService := OpenService(hSCM, ServiceName, SERVICE_DELETE);
    if hService <> 0 then begin
      Result := DeleteService(hService);
      CloseServiceHandle(hService);
    end;
    CloseServiceHandle(hSCM);
  end;
end;
 
function StartService(ServiceName: string): boolean;
var
  hSCM: HANDLE;
  hService: HANDLE;
  Status: SERVICE_STATUS;
  dwCheckPoint: Cardinal;
begin
  hSCM := OpenSCManager('', 'ServicesActive', SC_MANAGER_CONNECT);
  if hSCM <> 0 then begin
    hService := OpenService(hSCM, ServiceName, SERVICE_START or SERVICE_QUERY_STATUS);
    if hService <> 0 then begin
      if StartService_(hService, 0, 0) then begin
        if QueryServiceStatus(hService, Status) then begin
          while Status.dwCurrentState <> SERVICE_RUNNING do begin
            dwCheckPoint := Status.dwCheckPoint;
            Sleep(Status.dwWaitHint);
            if (not QueryServiceStatus(hService, Status)) then Break;
            if (Status.dwCheckPoint < dwCheckPoint) then Break;
          end;
        end;
      end;
      CloseServiceHandle(hService);
    end;
    CloseServiceHandle(hSCM);
  end;
  Result := Status.dwCurrentState = SERVICE_RUNNING;
end;
 
function StopService(ServiceName: string): boolean;
var
  hSCM: HANDLE;
  hService: HANDLE;
  Status: SERVICE_STATUS;
  dwCheckPoint: Cardinal;
begin
  hSCM := OpenSCManager('', 'ServicesActive', SC_MANAGER_CONNECT);
  if hSCM > 0 then begin
    hService := OpenService(hSCM, ServiceName, SERVICE_STOP or SERVICE_QUERY_STATUS);
    if hService > 0 then begin
      if ControlService(hService, SERVICE_CONTROL_STOP, Status) then begin
        if QueryServiceStatus(hService, Status) then begin
          while Status.dwCurrentState <> SERVICE_STOPPED do begin
            dwCheckPoint := Status.dwCheckPoint;
            Sleep(Status.dwWaitHint);
            if not QueryServiceStatus(hService, Status) then Break;
            if Status.dwCheckPoint < dwCheckPoint then Break;
          end;
        end;
      end;
      CloseServiceHandle(hService);
    end;
    CloseServiceHandle(hSCM);
  end;
  Result := Status.dwCurrentState = SERVICE_STOPPED;
end;
 
function IsServiceRunning(ServiceName: string) : boolean;
var
  hSCM: HANDLE;
  hService: HANDLE;
  Status: SERVICE_STATUS;
begin
  hSCM := OpenSCManager('', 'ServicesActive', SC_MANAGER_CONNECT);
  Result := False;
  if hSCM <> 0 then begin
    hService := OpenService(hSCM, ServiceName, SERVICE_QUERY_STATUS);
    if hService <> 0 then begin
      if QueryServiceStatus(hService, Status) then
        Result :=(Status.dwCurrentState = SERVICE_RUNNING);
      CloseServiceHandle(hService);
    end;
    CloseServiceHandle(hSCM);
  end;
end;
 
procedure RemoveAmmyyService;  
begin  
  if IsServiceInstalled('AmmyyAdmin') then begin
    if IsServiceRunning('AmmyyAdmin') then StopService('AmmyyAdmin');
    RemoveService('AmmyyAdmin');
  end;
end;
 
procedure InstallAmmyyService;
begin
  if not IsServiceInstalled('AmmyyAdmin') then
    if InstallService('"' + ExpandConstant('{app}') + '\AA_v3.exe" -service -debug', 'AmmyyAdmin', 'Ammyy Admin', '', SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START) then
     StartService('AmmyyAdmin');  
end;
 
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then RemoveAmmyyService;  
end;
 


Всего записей: 335 | Зарегистр. 06-03-2008 | Отправлено: 15:25 19-02-2015 | Исправлено: htuos, 15:43 19-02-2015
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Ammyy Admin


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru