我想用以下代码实现先判断系统版本,如果是WIN 9X则用RegisterServiceProcess隐藏进程,但是,当我在Win XP上运行时没有对话框跳出来说“OK”却也提示
无法定位程序输入点RegisterServiceProcess于动态链接库KERNEL32.DLL
好像if... then...被忽略了
而在Win98下运行一切正常
=============================================
type 
TOSVersion = (osUnknown, os95, os98, osME, osNT3, osNT4, os2K, osXP); 
function GetOS: TOSVersion; 
var 
OS: TOSVersionInfo; 
begin 
ZeroMemory(@OS,SizeOf(OS)); 
OS.dwOSVersionInfoSize := SizeOf(OS); 
GetVersionEx(OS); 
if (((OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 0)) or
   ((OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 10)) or
   ((OS.dwMajorVersion = 4) and (OS.dwMinorVersion = 90))) then
   begin
     ShowMessage('ok');
     RegisterServiceProcess(GetCurrentProcessID, 1);
   end;
end;

解决方案 »

  1.   

    直接这样判断
    if(OS.dwPlatformId <> VER_PLATFORM_WIN32_NT) {这样就能达到你要的效果}
    then ...
    else ...
    就可以了
      

  2.   

    发现一个更奇怪的问题:在窗体上放一个Button1然后只写一句代码如下,同样,只要一运行就提示:无法定位程序输入点RegisterServiceProcess于动态链接库KERNEL32.DLL,可是我根本还来不及点一下Button1
    ================================================
    procedure TForm1.btn1Click(Sender: TObject);
    begin
    RegisterServiceProcess(GetCurrentProcessId,1);
    end;
      

  3.   

    改用动态载入DLL,别用静态声明的