Форум: "Начинающим";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];
Внизcreateservice вызывает падение rpc... Найти похожие ветки
← →
istok20 © (2009-08-20 19:31) [0]подскажите куда копать, если createservice вызывает отказ rpc и как следствие ребут\зависание важных служб ос (hservice возвращает 0, а если ставить руками через /install то всё ок)?
происходит такое на малом кол-ве компов
← →
Anatoly Podgoretsky © (2009-08-20 19:55) [1]> istok20 (20.08.2009 19:31:00) [0]
И ты хочешь ответ без кода, на основание слов - не работает?
← →
istok20 © (2009-08-20 20:37) [2]установка сервиса происходит в таком духе:
function TForm1.GetServiceType(const AServiceType: TServiceType;
Interactive: Boolean): Integer;
begin
Result := SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS;
case AServiceType of
stWin32:
if Interactive then
Result := SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS
else
Result := SERVICE_WIN32_OWN_PROCESS;
stDevice: Result := SERVICE_KERNEL_DRIVER;
stFileSystem: Result := SERVICE_FILE_SYSTEM_DRIVER;
end;
end;
function TForm1.GetStartType(
const AStartType: TStartType): Integer;
begin
Result := SERVICE_AUTO_START;
case AStartType of
stBoot, stSystem, stAuto: Result := SERVICE_AUTO_START;
stManual: Result := SERVICE_DEMAND_START;
stDisabled: Result := SERVICE_DISABLED;
end;
end;
function TForm1.GetErrorSeverity(
const AErrorSeverity: TErrorSeverity): Integer;
begin
Result := SERVICE_ERROR_NORMAL;
case AErrorSeverity of
esIgnore: Result := SERVICE_ERROR_IGNORE;
esNormal: Result := SERVICE_ERROR_NORMAL;
esSevere: Result := SERVICE_ERROR_SEVERE;
esCritical: Result := SERVICE_ERROR_CRITICAL;
end;
end;
procedure TForm1.CreateMyService(var ServiceInfo: TweServiceInfo; afilename: string);
var
hService: SC_HANDLE;
lpVectors: PChar;
StartSrvName: Pointer;
i: Integer;
FErrorStr: string;
FSCManager: SC_HANDLE;
begin
FSCManager := OpenSCManager(PChar(Edit1.Text), nil, SC_MANAGER_ALL_ACCESS);
with ServiceInfo do
try
if rServiceStartName = "" then StartSrvName := nil
else StartSrvName := PChar(rServiceStartName);
hService := CreateService(FSCManager, PChar(rName), PChar(rDisplayName),
SERVICE_ALL_ACCESS, GetServiceType(rServiceType, rInteractive), GetStartType(rStartType),
GetErrorSeverity(rErrorSeverity), PChar(afilename), PChar(rLoadGroup), nil, PChar(""),
StartSrvName, PChar(rPassword));
Memo1.Lines.Add("hService="+IntToStr(hService))
finally
CloseServiceHandle(FSCManager);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := GetComputerName;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ServiceInfo: TweServiceInfo;
begin
//add ClientDataTransferService
with ServiceInfo do
begin
rServiceStartName := "";
rName := cClientDataTransferServiceName;
rDisplayName := cClientDataTransferServiceDisplayName;
rServiceType := stWin32;
rStartType := stAuto;
rErrorSeverity := esNormal;
rLoadGroup := "";
rPassword := "";
rInteractive := True;
end;
CreateMyService(ServiceInfo, ExtractFilePath(Forms.Application.Exename)+"distrib\service1.exe");
end;
← →
Leonid Troyanovsky © (2009-08-21 08:53) [3]
> istok20 © (20.08.09 20:37) [2]
> установка сервиса происходит в таком духе:
PChar("") и nil - две большие разницы.
Смотри Pointer(s) vs PChar(s).
И, во-ще, прежде чем кричать "караул" изучают результаты,
возвращаемые функциями с возможной GetLastError в порядке,
установленном msdn.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c