Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   RegisterServiceProcess (http://forum.oszone.net/showthread.php?t=29697)

pomka 09-05-2004 16:05 205378

я сделал прогу которая в win9x использует RegisterServiceProcess но в xp она не компилится. че делать

JCooper 09-05-2004 16:11 205379

pomka эта ф-ция работает лишь на платформе 9х.

Guest 10-05-2004 13:21 205380

я понял мне не надо чтобы она работала, мне надо чтобы она компилировалась, но при компиляции он говорит что такой функции в rundll нет. может там директиву какую нибудь роставить

hasherfrog 11-05-2004 08:51 205381

Guest
Возьмите нужную dll от Win9x и явно укажите её при компиляции. При работе можно также поступить - определить версию виндов и подгрузить соответствующую dll. Что-то вроде этого. Проблема в том, что эти библиотеки придется таскать с собой (как раз для компиляции, при работе они уже должны быть в windows\system32)
Народ, поправьте меня, если наврал.

pva 12-05-2004 10:50 205382

А её в RunDll и нет. Она в Kernel32. А для того, чтобы подключалась, нужно LoadModule и GetProcAddress

pomka 20-05-2004 15:15 205383

В XP мне эта функция не нужна, мне надо чтобы прога в xp компилилась. если я явно укажу dll то в winme эта функция работать не будет.

[s]Исправлено: Prisoner, 4:46 22-05-2004[/s]

pva 21-05-2004 11:01 205384

Используй GetProcAddress. Будет работать, даже если требуемой функции вообще нет.

Guest 24-05-2004 14:54 205385

А как его использовать?

hasherfrog 26-05-2004 11:51 205386

Случайно набрёл. Решим вопрос раз и навсегда.
Код:

#include <iostream.h>
#include <windows.h>
 
BOOL (WINAPI *RegisterServiceProcess)(DWORD dwProcessId,DWORD dwType);
 
int main(){
 
HINSTANCE hKernel;
int i=1;
//Пытаемся получить идентификатор загруженной библиотеки
hKernel=LoadLibrary("KERNEL32.DLL");
 
if(hKernel){
        //Идентификатор загруженной библиотеки был успешно получен
        cout<<"Success load library kernel32.dll"<< endl;
        RegisterServiceProcess=(int(__stdcall*)(DWORD,DWORD))GetProcAddress(hKernel,"RegisterServiceProcess");
        if(RegisterServiceProcess){
                //Указатель на функцию RegisterServiceProcess был
                //успешно получен.
                cout<<"Success to have address of the specified exported dynamic-link library (DLL) function"<< endl;
                if(RegisterServiceProcess(GetCurrentProcessId(),i))
                        cout<<"Success registers the process as a service process"<< endl;
                        //Процесс был успешно зарегестрирован как сервис
        }else{
                //Указатель на функцию RegisterServiceProcess не
                //был успешно получен.
                cout<<"Failed to have address of the specified exported dynamic-link library (DLL) function"<< endl;
                cin>>i;
                return 0;
        }
}else{
        //Идентификатор загруженной библиотеки не был получен
        cout<<"Failed load library kernel32.dll"<< endl;
        cin>>i;
        return 0;
}
cout<<"Registers the process as a service process:1"<< endl;
cout<<"Unregisters the process as a service process:0"<< endl;
cin>>i;
if (RegisterServiceProcess(GetCurrentProcessId(),i)){
        cout<<"Success"<< endl;
}else{
        cout<<"Failed"<< endl;
}
cin>>i;
return 0;
}
 
/*Для компиляции использовался MSVC5, проект типа Console Application,
 чтобы в процессе сборки не было недоразумений проверьте на вкладке Link
 поле Object libraries/modules, оно должно быть пустым. */



Время: 11:28.

Время: 11:28.
© OSzone.net 2001-