做了一个软件,想作为商品卖,但是又要给别人一个试用期,请问在软件中该如何设置一个时间限制或次数设置?有什么好的办法?

解决方案 »

  1.   

    转直接修改exe文件本身的源代码。注意调试时显示的次数始终是0,因为调试时每次都要重写可执行文件。
    请执行生成的exe文件查看运行结果。本程序仅能运行50次。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
        usedTimes:byte;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
      fs:TFileStream;
    begin
      fs:=TFileStream.Create(application.ExeName,fmopenread or fmsharedenynone);
      fs.Seek(-1,soFromEnd);
      fs.Read(usedTimes,1);
      fs.Free;
      showMessage('你已使用了'+intToStr(usedTimes)+'次!只能使用50次。');
      if usedTimes>50 then application.Terminate;  //限制使用50次
    end;procedure TForm1.FormDestroy(Sender: TObject);
    var
      f:Textfile;
      fs:TFileStream;
      i:byte;
    begin
      i:=usedTimes+1;
      copyfile('project1.exe','a.exe',false);
      fs:=TFilestream.Create('a.exe',fmopenwrite or fmshareExclusive);
      fs.Seek(-1,soFromEnd);
      fs.Write(i,1);
      fs.Free;
      assignfile(f,'delSelf.bat');
      rewrite(f);
      writeln(f,'del project1.exe');//+#10+'ren a.exe project1.exe'+#10+'del %0');
      writeln(f,'ren a.exe project1.exe');
      writeln(f,'del %0');
      closefile(f);
      winExec('delSelf.bat',sw_hide);
    end;end.
      

  2.   

    to esu: 这个问题我还没有完全弄明白,运行时的usedTimes写不到文件里面,请你做一个详细一点的给我,谢谢!!
      

  3.   

    学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!学习ING!!!!
      

  4.   

    使用50次procedure TfrmLogin.FormCreate(Sender: TObject);
    const
      _Path = 'Software\YourPass';
    var
      reg : TRegistry;
      iCount : Integer;
    begin
      reg := TRegistry.Create;
      try
        reg.RootKey := HKEY_CURRENT_USER;
        if reg.KeyExists(_Path) then
        begin
          if reg.OpenKey(_Path,False) then
          begin        
          if reg.ReadString('Count') = '' then
            begin
              reg.WriteString('Count','1');
              iCount := 0;
            end
            else
            begin
              iCount := StrToInt(reg.ReadString('Count')) + 1;
              reg.WriteString('Count',IntToStr(iCount));
            end;
            if iCount > 50 then
              Halt;    //退出
          end;
        end;
      finally
        reg.CloseKey;
        reg.Free;
      end;
    end;