Отож. Я тоже.
» Ammyy Admin
Сегодня случилась интересная история. Попросил клиента установить последнюю версию что-бы соединится со мной, как только он включил программу - сразу получил входящие подключение, наивно подумал, что это я, хотя номер мне не говорил. В течении 6 минут, пока он понял, что это не я, ему отформатировали флешку, включили порнуху, странички армии Пакистана, нагадили в аутлуке и скорее всего насадили вирусни. В общем он винду переустанавливает...
Всё тупо вышло, но есть один момент, как можно в течении 1-2 минут после запуска найти действующий номер, сканирование или же сервер через который всё проходит дискредитирован? Хотя возможно у него на компе был вирус который отловил установку амми и послал хакеру? Почему на установленный тимвьювер не было попыток соединится? Мне кажется амми не так распространён что бы кто-то постоянно сканировал адреса в поиске жертвы. Плюс ещё юзер подтвердить должен... Странно.
Всё тупо вышло, но есть один момент, как можно в течении 1-2 минут после запуска найти действующий номер, сканирование или же сервер через который всё проходит дискредитирован? Хотя возможно у него на компе был вирус который отловил установку амми и послал хакеру? Почему на установленный тимвьювер не было попыток соединится? Мне кажется амми не так распространён что бы кто-то постоянно сканировал адреса в поиске жертвы. Плюс ещё юзер подтвердить должен... Странно.
Цитата:
Странно.
Скорее всего скачал уже "заряженный" сабж.
Кстати да, еще не известно, откуда он качал
Скачано было с офф сайта. Скорее всего на компе вирус жил, хотя откуда такая оперативность взялась, имею ввиду что только запустил и сразу соединение...
ToBad
Цитата:
следят за последними сгенерированными номерами.
была недавно аналогичная ситуация, когда помогал с компом по удаленке, ну и добавили в разрешенные не меня )
это я уже потом заметил другие попытки подключения и объяснил что и как - ничего сделать не успели.
Цитата:
хотя откуда такая оперативность взялась, имею ввиду что только запустил и сразу соединение
следят за последними сгенерированными номерами.
была недавно аналогичная ситуация, когда помогал с компом по удаленке, ну и добавили в разрешенные не меня )
это я уже потом заметил другие попытки подключения и объяснил что и как - ничего сделать не успели.
Распрстраняйте преднастроенный эмми
Цитата:
сразу получил входящие подключение
Недавно то же самое было, хорошо я рядом был и сразу кто то стучался. Забыл ID записать.
Подскажите, AA умеет подключаться по протоколу RDP через порт 3389?
Получаю ошибку:
Error 10061 while connecting to 'айпишник', port=5931
Получаю ошибку:
Error 10061 while connecting to 'айпишник', port=5931
Цитата:
Подскажите, AA умеет подключаться по протоколу RDP через порт 3389?
Получаю ошибку:
Error 10061 while connecting to 'айпишник', port=5931
Умеет.
Я делал так.
Запускал АА на удаленном ПК.
На локальном ПК в АА выбирал тип подключения MS RDP, после этого происходило подключение к удаленному 1-му ПК, на удаленном предварительно записывал ID АА в список разрешенных для подключения.
Народ, подскажите:
1. что может означать ошибка:
couldn't connect to routers 69.64.58.38:443,80,8080
интернет на компьютере есть (тот-же teamviwer заходит без проблем), на соседний компьютер в этом-же офисе по Ammy подключаюсь без проблем
2. Можно как-то через Ammy подключиться по rdp, если rdp сидит на нестандатном порту?... т.е. как заставить ammy понимать rdp-адреса типа 178.32.118.26:3220
1. что может означать ошибка:
couldn't connect to routers 69.64.58.38:443,80,8080
интернет на компьютере есть (тот-же teamviwer заходит без проблем), на соседний компьютер в этом-же офисе по Ammy подключаюсь без проблем
2. Можно как-то через Ammy подключиться по rdp, если rdp сидит на нестандатном порту?... т.е. как заставить ammy понимать rdp-адреса типа 178.32.118.26:3220
в инструкции где-то написано, что при использовании своего роутера со стороны оператора надо снимать в настройках галочку - запрашивать ip клиентского роутера
У меня почему-то не работает Ammyy в виде службы - невозможно подключиться.
В файле *.log такие ошибки идут:
20150115-17:42:37.869 00002CD0 - ERROR: ERROR: CreateProcessAsUser() error=87, session=10
Если запустить двойным щелчком, то нет никаких проблем.
В файле *.log такие ошибки идут:
20150115-17:42:37.869 00002CD0 - ERROR: ERROR: CreateProcessAsUser() error=87, session=10
Если запустить двойным щелчком, то нет никаких проблем.
может какой-нить антивирус блочит установку новых "опасных" служб?
ashtroy, в том то и дело, что установка проходит без происшествий, службу можно остановить, запустить, перезапустить без ошибок, но, когда подключаешься к компьютеру, выдает "Компьютер ID=******** не найден". Отключал антивирус, добавил файл ammyy в исключения - ничего не изменилось. Острой необходимости использования Ammyy нет, поэтому удалил его. Буду пользоваться RDP.
Может кто сталкивался с таким, как удалось решить вопрос.
Если запустить AA на сервере как службу, то тогда можно подключаться к серверу в режиме RDP, используя на клиенте тип подключения MS RDP, а вот если взять клиентскую станцию, например, с Windows 8.1, где используется режим MultiRDP, т.е. тоже позволяет одновременно подключаться к рабочей станции и 2-му пользователю, то такой режим не срабатывает, АА сбрасывает подключение и подключаться можно только в сеанс.
Кто пробовал использовать АА в таком режиме на рабочих станциях и удалось как-то побороть такую проблему и подключиться в режиме MS RDP к удаленной рабочей станции?
Такой режим нужен для тихого удаленного администрирования.
Если запустить AA на сервере как службу, то тогда можно подключаться к серверу в режиме RDP, используя на клиенте тип подключения MS RDP, а вот если взять клиентскую станцию, например, с Windows 8.1, где используется режим MultiRDP, т.е. тоже позволяет одновременно подключаться к рабочей станции и 2-му пользователю, то такой режим не срабатывает, АА сбрасывает подключение и подключаться можно только в сеанс.
Кто пробовал использовать АА в таком режиме на рабочих станциях и удалось как-то побороть такую проблему и подключиться в режиме MS RDP к удаленной рабочей станции?
Такой режим нужен для тихого удаленного администрирования.
Подскажите, может кто знает, есть ли возможность для АА указать параметры в свойствах ярлыка запуска приложения чтобы можно было ярлыком сразу инициировать соединение, например, по RDP к определенному ID?
Подскажите а где программа хранит свои настройки и как например передать свой настроенный экземпляр
serborkr, ветку не читали?
http://forum.ru-board.com/topic.cgi?forum=5&topic=28705&start=340#13
http://forum.ru-board.com/topic.cgi?forum=5&topic=28705&start=340#13
может сталкивался кто с такой ошибкой:
20150212-15:28:34.527 00001330 - ERROR: ERROR 1726 CreateServiceW() while registering the Ammyy service
20150212-15:28:38.503 00001330 - ERROR: Error {12007} occured while connecting to server "http://rl.ammyy.com"
20150212-15:28:43.308 000013E0 - ERROR: ERROR 1726 CreateServiceW() while registering the Ammyy service
20150212-15:28:59.506 000013E0 - ERROR: Error {12007} occured while connecting to server "http://rl.ammyy.com"
20150212-15:29:06.807 000014F8 - ERROR: ERROR 1726 CreateServiceW() while registering the Ammyy service
20150212-15:29:09.857 000014F8 - ERROR: Error {12007} occured while connecting to server "http://rl.ammyy.com"
20150212-15:30:35.616 00001190 - ERROR: ERROR 1726 CreateServiceW() while registering the Ammyy service
20150212-15:32:10.959 00001190 - ERROR: Error {12007} occured while connecting to server "http://rl.ammyy.com"
20150212-15:28:34.527 00001330 - ERROR: ERROR 1726 CreateServiceW() while registering the Ammyy service
20150212-15:28:38.503 00001330 - ERROR: Error {12007} occured while connecting to server "http://rl.ammyy.com"
20150212-15:28:43.308 000013E0 - ERROR: ERROR 1726 CreateServiceW() while registering the Ammyy service
20150212-15:28:59.506 000013E0 - ERROR: Error {12007} occured while connecting to server "http://rl.ammyy.com"
20150212-15:29:06.807 000014F8 - ERROR: ERROR 1726 CreateServiceW() while registering the Ammyy service
20150212-15:29:09.857 000014F8 - ERROR: Error {12007} occured while connecting to server "http://rl.ammyy.com"
20150212-15:30:35.616 00001190 - ERROR: ERROR 1726 CreateServiceW() while registering the Ammyy service
20150212-15:32:10.959 00001190 - ERROR: Error {12007} occured while connecting to server "http://rl.ammyy.com"
кто-нибудь нашел решение подключаться по нестандартному порту при прямом подключении по IP?
если указать просто адрес, то клиент подключается по порту 5931. если указать адрес и порт (в голову пришло ip:port), пишет ошибку. это вообще возможно?
так-то в настройках сети есть возможность указать порты, но подключение по порту 5931 можно только включить/выключить, а изменить порт нельзя. называется "разрешить входящие соединения по ip".
и есть еще галка "разрешить direct tcp" с кнопкой "внешние порты", под которой список портов.
кому-нибудь удалось понять тайный смысл этих настроек, кроме включить/выключить? или список портов работает только при подключении через роутер?
собственно, есть желание написать несколько правил на шлюзе вида port1 > ip1:5931, port2 > ip2:5931 ...
только как потом подключаться? ip:port не работает. ip port (через пробел) - подключение к ip по порту 5931, любые символы после ip и пробела отбрасываются программой
если указать просто адрес, то клиент подключается по порту 5931. если указать адрес и порт (в голову пришло ip:port), пишет ошибку. это вообще возможно?
так-то в настройках сети есть возможность указать порты, но подключение по порту 5931 можно только включить/выключить, а изменить порт нельзя. называется "разрешить входящие соединения по ip".
и есть еще галка "разрешить direct tcp" с кнопкой "внешние порты", под которой список портов.
кому-нибудь удалось понять тайный смысл этих настроек, кроме включить/выключить? или список портов работает только при подключении через роутер?
собственно, есть желание написать несколько правил на шлюзе вида port1 > ip1:5931, port2 > ip2:5931 ...
только как потом подключаться? ip:port не работает. ip port (через пробел) - подключение к ip по порту 5931, любые символы после ip и пробела отбрасываются программой
нужен кому скрипт Inno Setup тихой установки ammyy как службы?
htuos, я батником ставлю
а мне в 80 магазинов в области ставить. прога, которая сама скачает что нужно и с правами админа запустит в магазинах стоит, поэтому приходится извращатся
качать можно из батника же, разве что через вызов внешнего vbs-скрипта.
ID определяет? хозяину отправляет? тогда очень интересно
а вообще, выкладывайте, лишним точно не будет. вдруг кому ко двору придется
ID определяет? хозяину отправляет? тогда очень интересно
а вообще, выкладывайте, лишним точно не будет. вдруг кому ко двору придется
wheel
Цитата:
ну и как они у меня в магазинах с ограниченными правами качать будут и ставить?
к тому же там тетки предпенсионного возраста в основном работают. я писал утилиту, в которой нужно было нажать одну кнопку, дождаться окончания работы проги, закрыть программу. и то меня по телефону 2 дня задалбывали.
Цитата:
у меня vpn-сервер, у клиентов стат. адреса, поэтому соединение только по IP будет. алгоритмом получения ID не заморачивался даже. хотя если его узнать, то на почту письмо отослать можно будет наверное.
[more=скрипт...]
Код:
#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;
Цитата:
качать можно из батника же, разве что через вызов внешнего vbs-скрипта.
ну и как они у меня в магазинах с ограниченными правами качать будут и ставить?
к тому же там тетки предпенсионного возраста в основном работают. я писал утилиту, в которой нужно было нажать одну кнопку, дождаться окончания работы проги, закрыть программу. и то меня по телефону 2 дня задалбывали.
Цитата:
ID определяет? хозяину отправляет? тогда очень интересно
у меня vpn-сервер, у клиентов стат. адреса, поэтому соединение только по IP будет. алгоритмом получения ID не заморачивался даже. хотя если его узнать, то на почту письмо отослать можно будет наверное.
[more=скрипт...]
Код:
#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;
Цитата:
ну и как они у меня в магазинах с ограниченными правами качать будут и ставить?
а это они как запускают? все равно права нужны.
Цитата:
алгоритмом получения ID не заморачивался даже
имхо либо распознавание скриншота, либо чтение значения поля
поскольку и на то и на другое нужно время, отказался в пользу IP
wheel
Цитата:
в каждом магазине установлена прога. они ее запускают, нажимают кнопку.
прога подключается к моему ftp-серверу, качает ini-шник, в котором написано, что откуда надо скачать.
качает что указано в Temp на пользовательскую машину
дальше в ini-шнике указано что с какими правами запускать. запускаются консольные команды, обычные ехе-шники, обработки 1с. запускать можно от имени текущего пользователя или с правами админа. список логинов/паролей у проги есть, идет полным перебором, пока не запустит. можно запускать в скрытом режиме и т.д., там куча настроек
мне на ftp отправляется лог выполнения указанных процедур.
пользователю выдается сообщение, что мол все, можно закрывать
недавно так во всех магазинах фискальные регистраторы перепрограммировал и смену часовых поясов делал. вполне себе удобно
Цитата:
AA_v3.exe -outid
получаем файл ammyy_id.log, в котором все есть
а вот как из инно на почту или еще куда отправить полученный ID, это другой вопрос
Цитата:
а это они как запускают? все равно права нужны.
в каждом магазине установлена прога. они ее запускают, нажимают кнопку.
прога подключается к моему ftp-серверу, качает ini-шник, в котором написано, что откуда надо скачать.
качает что указано в Temp на пользовательскую машину
дальше в ini-шнике указано что с какими правами запускать. запускаются консольные команды, обычные ехе-шники, обработки 1с. запускать можно от имени текущего пользователя или с правами админа. список логинов/паролей у проги есть, идет полным перебором, пока не запустит. можно запускать в скрытом режиме и т.д., там куча настроек
мне на ftp отправляется лог выполнения указанных процедур.
пользователю выдается сообщение, что мол все, можно закрывать
недавно так во всех магазинах фискальные регистраторы перепрограммировал и смену часовых поясов делал. вполне себе удобно
Цитата:
имхо либо распознавание скриншота, либо чтение значения поля
AA_v3.exe -outid
получаем файл ammyy_id.log, в котором все есть
а вот как из инно на почту или еще куда отправить полученный ID, это другой вопрос
тихая установка ammyy как службы
на указанный почтовый ящик высылается ID, ComputerName, UserName
http://rusfolder.com/43092460
в одном каталоге со скриптом должны лежать
AA_v3.exe
settings3.bin (файл с настроками ammyy)
contacts3.bin (если нужна контактная книга)
eml.dll (если нужно отправить ID на почту)
что могет установщик:
1. ставит ammyadmin как службу и запускает ее с ключами -service -debug, что позволяет хранить настройки службы в одной папке с исполняемым файлом (в папке установки)
2. инсталлятор перед установкой сам остановит, а затем удалит службу Ammy
3. если нужно, то во время установки можно получить Ammyy ID и отправить его на указанный почтовый ящик
4. для отправки почты не нужны данные отправителя письма (логин/пароль), только адрес получателя.
новая длл <100КБ, в отличии от старой
тихая установка AmmyySetup.exe /verysilent
тихий анинсталл unins000.exe /verysilent
срипт компилился на Inno Setup 5.5.5 (u), на анси-версии работать не будет
тестировалось на win7sp1 x32
письма для тестов рассылались на mail.ru и yandex.ru
на указанный почтовый ящик высылается ID, ComputerName, UserName
http://rusfolder.com/43092460
в одном каталоге со скриптом должны лежать
AA_v3.exe
settings3.bin (файл с настроками ammyy)
contacts3.bin (если нужна контактная книга)
eml.dll (если нужно отправить ID на почту)
что могет установщик:
1. ставит ammyadmin как службу и запускает ее с ключами -service -debug, что позволяет хранить настройки службы в одной папке с исполняемым файлом (в папке установки)
2. инсталлятор перед установкой сам остановит, а затем удалит службу Ammy
3. если нужно, то во время установки можно получить Ammyy ID и отправить его на указанный почтовый ящик
4. для отправки почты не нужны данные отправителя письма (логин/пароль), только адрес получателя.
новая длл <100КБ, в отличии от старой
тихая установка AmmyySetup.exe /verysilent
тихий анинсталл unins000.exe /verysilent
срипт компилился на Inno Setup 5.5.5 (u), на анси-версии работать не будет
тестировалось на win7sp1 x32
письма для тестов рассылались на mail.ru и yandex.ru
заменил ссылку в предыдущем посте. добавил исходники (если использование Indy можно так назвать) dll, чтобы не было претензий, что что-то куда-то не туда отправляется. компилировалось на delphixe7update1
Страницы: 12345678910111213141516171819
Предыдущая тема: Firewall по Win2003 Server x64
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.