有没有可以控制一个程序不能单独运行,但可以被另一个程序调用运行?

解决方案 »

  1.   

    一个想法:
      你可以在程序A启动是检测调用参数,如果没有的话就退出
      程序B调用程序A的时间传入参数!!不知道你有没有明白??!================================================================
         ◆◆◆ CSDN查询助手,查询方便快捷◆◆◆ 下载地址:  
     http://CoolSlob.ifood1.com/Download/CSDNFinder.exe  
     http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]  
      

  2.   

    在A程序中使用winexec('...\B.exe runcode',SW_SHOWNORMAL);
    在B程序中project里写  Application.Initialize;
      if ParamStr(1) = 'runcode'
      then begin
        Application.CreateForm(TForm1, Form1);
        Application.Run;
      end else Application.Terminate;
      

  3.   

    我觉得可以用dll,它本身不能执行,但可以被调用,满足你的要求
      

  4.   

    做成miniserver类型的COM服务器程序。
      

  5.   

    更一下扩展名嘛,ren exe abc
      

  6.   

    最好在两个程序之间用DDE连接,如果服务主程序没有启动,DDE接收不到数据,这样的好处是不但可以安全启动程序,而且可以用在需要大量交换数据的两个程序之间.
      

  7.   

    我记得好像有个api可以检测是谁调用的自己,具体的我忘了。不过还有个办法:用两个参数+对称加密: (假设A "调用" B.密钥m都已经固化在A,B中)参数1:用m加密的任意随机字符串s1的加密结果s2。
    参数2:s1的crc校验码。B受到2个参数之后,用事先约定的密钥m解开参数1,即s2->s3,并对解密初的s3进行crc校验,如果校验码和参数2一样,那么表示解密成功。就可以继续运行,否则halt;这可以在某种程度上避免别人模仿那个固定的参数而“非法”调用B.
    但是一旦事先约定好并固化的m被发现,彻底崩溃。
      

  8.   

    可以的。用 FindWindow('Form标题',nil);
    你可以这样。
    假设有A。EXE 和B。EXE 两个文件。
    在A的Project里面写var   handle:integer;begin
       handle:=findwindow(classname,nil);/查找B的类名
       if handle=0 then
       begin
       messagebox(0,'该程序必须要通过B调用!','运行',0);
       halt;
       end;
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
    不行你找我...
      

  9.   

    忘了,还的补充一点:
    在Project的useswindows, //加入该句才能调用函数const classname='B的类名';
      

  10.   

    在主程序创建的时候Creat一个Mutex,比如“SDEEEGGHHFF”
    //CreateMutex(Nil, true, 'SDEEEGGHHFF');
    在被调用的程序的dpr里Use Windows,
    begin
    if OpenMutex(MUTEX_ALL_ACCESS,false,pchar('SDEEEGGHHFF'))<> 0 then 
      begin
        Application.Initialize;
        Application.CreateForm(TFlashWindow, FlashWindow);
        Application.Run;
      end
    else //你的提示
    end.
      

  11.   

    哈哈,真激烈呀~~================================================================
         ◆◆◆ CSDN查询助手,查询方便快捷◆◆◆ 下载地址:  
     http://CoolSlob.ifood1.com/Download/CSDNFinder.exe  
     http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]  
      

  12.   

    1用参数调用
    2做成DLL调用,最好也加参数
    3被调用程序自动判断调用程序
      

  13.   

    用全局原子吧 GlobalAddAtom等,如果被调用程序启动,发现不存在指定原子
    (FindGlobalAtom?)就不继续执行,否则执行。主程序执行完后删除原子(GlobalDeleteAtom?),具体函数计不清了,可以查查MSDN
      

  14.   

    恩,难道说我的那个方法不对不简单呀?西西^_*学习其他方法ing……