Q&A

  • 베타버젼 배포시에 한달간만 쓸 수 있게 하고싶은데 어떻게 해야 하나요?
제목 그대로입니다...



인스톨해서 한달동안만 쓸 수있게끔 하고 싶은데요...



어떻게 해야 하나요?



또는 날짜를 정해 놓고서 그날짜까지만 사용이 가능하게 하려면 어떻게 해야 합니까?



인스톨쉴드에서 해야 하나요? 아니면 프로그램상에서 해줘야 하나요?



변경이 불가하게(?) 레지스트리의 파일날짜를 비교해서 하는 방법은 없나요?



가능하다면 약간의 힌트를 부탁합니다.....

5  COMMENTS
  • Profile
    조복기 2000.06.21 04:00
    류응철 wrote:

    > 제목 그대로입니다...

    >

    > 인스톨해서 한달동안만 쓸 수있게끔 하고 싶은데요...

    >

    > 어떻게 해야 하나요?

    >

    > 또는 날짜를 정해 놓고서 그날짜까지만 사용이 가능하게 하려면 어떻게 해야 합니까?

    >

    > 인스톨쉴드에서 해야 하나요? 아니면 프로그램상에서 해줘야 하나요?

    >

    > 변경이 불가하게(?) 레지스트리의 파일날짜를 비교해서 하는 방법은 없나요?

    >

    > 가능하다면 약간의 힌트를 부탁합니다.....





    안녕하세요~

    제가 일하는곳에 있는 개발프로그램중에 한 부분입니다..

    소스가 좀 엉망인데요 (민망~)

    대충 설명하면

    맨처음 그 프로그램이 실행될때 레지스트리값이 존재하는지 판단하고

    없으면 첨 실행된 시스템날짜를 Encode시켜서 레지스트리에 보관하고

    담에 다시 실행할때면 실행되는 날짜와 레지스트리에 기록된 날짜와 비교해서

    한달이 넘으면 사용을 막아버립니다..

    근데 중요한건 한번 한달이 넘어버리면 날짜를 1900-01-01로 기록해버려서

    사용자가 임으로 날짜를 조작해서 사용하지못한다는거죠..

    (이거 꽁수인것같음^^)

    밑에 소스보시면

    Section 부분이 있는데요 이 섹션이름을 사용자가 눈치못채게

    어려운 이름이 바꾸시면 좋겠죠?

    예를들어 'Usb Controller Setting' 등의 이름..

    아래에선 폼show에다 걸었는데 원하시는 곳에 루틴을 활용하시기바랍니다..

    그리고 소스 맨위에 상수로 값만 변경하면 데모 및 정품을 쉽게 변경가능할겁니다..



    사실 전 이런거(날짜막아버리는거..) 젤 싫어하는데

    회사에 있다보니 어쩔수없는 현실이군여..쩝..

    그냥 이렇게도 쓸수있다는걸로 참고하세요



    에러난다면 도망가야쥐..^^



    좋은하루되세요~





    Const ShareWare = False; // 데모버전(True) 정품(False) 구분



    implementation



    ..

    ..



    procedure TISPASSF.FormShow(Sender: TObject);

    begin

    if ShareWare then ProgramRegist(Sender);

    end;



    procedure TISPASSF.ProgramRegist(Sender: TObject);

    var FIniFile:TRegIniFile;

    Regist:TRegistry;

    Section,Key,sPName:string;

    a,b:Dword;

    sRSV:TStrings;

    H, C, D: String;

    Ini :TIniFile;

    BsMoneyCount, InputString: String;



    function EncodeLock(H:String) : String;

    var Str : String;

    i,j : integer;

    begin

    j := Length(H);

    Str := H;

    for i :=1 to Length(H) do begin

    Str[i] := chr(ord(Str[i]) + ord(Str[j]));

    Dec(j);

    end;

    Result := Str;

    end;

    function DecodeLock(H:String) : String;

    var Str : String;

    i,j : integer;

    begin

    j := Length(H);

    Str := H;

    for i :=1 to Length(H) do begin

    Str[j] := chr(ord(Str[j]) - ord(Str[i]));

    Dec(j);

    end;

    Result := Str;

    end;



    begin

    //Registry 읽고 쓰기

    sRSV := TStringList.Create;

    Key := '';

    sRSV.Clear;

    Regist := TRegistry.Create;

    Regist.RootKey := HKEY_CURRENT_USER;

    FiniFile := TRegIniFile.Create('SOFTWARE'); // License

    Section := 'License'; // <= 이부분에 류응철님이 원하시는 레지스트리이름을 적으세요~

    FiniFile.ReadSectionValues(Section,sRSV);

    if (sRSV.Count = 0) then // 없으면 프로그램 시작일을 Registry에 저장한다.

    begin

    H := EncodeLock(FormatDateTime('YYYY-MM-DD',Date));

    FiniFile.WriteString(Section,Section,H);

    Application.MessageBox('"모모모" 프로그램으로 오신것을 환영합니다.'+#13#13 +

    '이 프로그램은 연습용으로써 '+ #13#13 +

    '최초 실행일부터 한달(30일)간 사용할 수 있습니다.', MB_OK);

    Key := FiniFile.FileName;

    sRSV.Free;

    FiniFile.Free;

    Regist.Free;

    end else

    begin

    a := Pos('=',sRSV[0]); b := Length(sRSV[0]);

    H := DecodeLock(Copy(sRSV[0],a+1,b-a));

    if (StrToDate(H) < Date - 30) or (StrToDate(H) > Date + 30) then

    begin

    if H <> '1900-01-01' then

    begin

    H := EncodeLock('1900-01-01');

    FiniFile.WriteString(Section,Section,H);

    end;

    Application.MessageBox('"모모모" 프로그램 사용기간이 만료되었습니다.'+#13#13 +

    '정품을 구입하시면 제한없이 사용할 수 있으며 ' +#13#13 +

    '많은 해택을 드립니다.' ,'확인', MB_OK);

    sRSV.Free;

    FiniFile.Free;

    Regist.Free;

    Application.Terminate;

    end else

    begin

    Application.MessageBox('"모모모" 프로그램으로 오신것을 환영합니다.'+#13#13 +

    '정품을 구입하시면 제한없이 사용할 수 있으며 ' +#13#13 +

    '많은 해택을 드립니다.','확인', MB_OK);

    Key := FiniFile.FileName;

    sRSV.Free;

    FiniFile.Free;

    Regist.Free;

    end;

    end;

    end;



  • Profile
    류응철 2000.06.21 19:59




    FIniFile:TRegIniFile; <---- 에러

    TRegIniFile is a low-level wrapper for the Windows 95/NT system registry.

    윈도95/NT시스템레지스트리에 대하여 낮은 레벨을 감싼다(?)



    Regist:TRegistry; <---- 에러



    TRegistry is a low-level wrapper for the system registry and functions that operate on the registry

    시스템레지스트리와 레지스트리에 접하여 움직이는 함수에 대하여 낮은 레벨을 감싼다



    Ini :TIniFile; <---- 에러



    TIniFile is a low-level wrapper for the 16-bit Windows 3.x INI file system that enables storage and retrieval of application-specific information and settings in an application-specific INI file.

    ini파일이 있는 어플리케이션과 정보를 갖고있는 어플리케이션에 대하여 저장과 복구할 수 있는 16-bit Windows 3.x INI file system에 대하여 낮은 레벨을 감싼다



    위의 도움말을 해석한게 맞는지 모르겠네요.. 웨퍼.. 쩝.. 감싸? 뭘 감싸냠..ㅠ.ㅠ



    위의 세줄이 에러가 나서.. 에러가 왕창 나거든요..



    지금 윈98을 쓰는데..그래서 안되는 것일까요? 아니면... 무엇일까요..



    음.. 소스 해석도 못 했는데... 질문부터 올리려니까.. 죄송스럽습니다...ㅠ.ㅠ



    도망가지 마시고 .... 도움말 좀 주세요.......



    > Const ShareWare = False; // 데모버전(True) 정품(False) 구분

    >

    > implementation

    >

    > ..

    > ..

    >

    > procedure TISPASSF.FormShow(Sender: TObject);

    > begin

    > if ShareWare then ProgramRegist(Sender);

    > end;

    >

    > procedure TISPASSF.ProgramRegist(Sender: TObject);

    > var FIniFile:TRegIniFile;

    > Regist:TRegistry;

    > Section,Key,sPName:string;

    > a,b:Dword;

    > sRSV:TStrings;

    > H, C, D: String;

    > Ini :TIniFile;

    > BsMoneyCount, InputString: String;

    >

    > function EncodeLock(H:String) : String;

    > var Str : String;

    > i,j : integer;

    > begin

    > j := Length(H);

    > Str := H;

    > for i :=1 to Length(H) do begin

    > Str[i] := chr(ord(Str[i]) + ord(Str[j]));

    > Dec(j);

    > end;

    > Result := Str;

    > end;

    > function DecodeLock(H:String) : String;

    > var Str : String;

    > i,j : integer;

    > begin

    > j := Length(H);

    > Str := H;

    > for i :=1 to Length(H) do begin

    > Str[j] := chr(ord(Str[j]) - ord(Str[i]));

    > Dec(j);

    > end;

    > Result := Str;

    > end;

    >

    > begin

    > //Registry 읽고 쓰기

    > sRSV := TStringList.Create;

    > Key := '';

    > sRSV.Clear;

    > Regist := TRegistry.Create;

    > Regist.RootKey := HKEY_CURRENT_USER;

    > FiniFile := TRegIniFile.Create('SOFTWARE'); // License

    > Section := 'License'; // <= 이부분에 류응철님이 원하시는 레지스트리이름을 적으세요~

    > FiniFile.ReadSectionValues(Section,sRSV);

    > if (sRSV.Count = 0) then // 없으면 프로그램 시작일을 Registry에 저장한다.

    > begin

    > H := EncodeLock(FormatDateTime('YYYY-MM-DD',Date));

    > FiniFile.WriteString(Section,Section,H);

    > Application.MessageBox('"모모모" 프로그램으로 오신것을 환영합니다.'+#13#13 +

    > '이 프로그램은 연습용으로써 '+ #13#13 +

    > '최초 실행일부터 한달(30일)간 사용할 수 있습니다.', MB_OK);

    > Key := FiniFile.FileName;

    > sRSV.Free;

    > FiniFile.Free;

    > Regist.Free;

    > end else

    > begin

    > a := Pos('=',sRSV[0]); b := Length(sRSV[0]);

    > H := DecodeLock(Copy(sRSV[0],a+1,b-a));

    > if (StrToDate(H) < Date - 30) or (StrToDate(H) > Date + 30) then

    > begin

    > if H <> '1900-01-01' then

    > begin

    > H := EncodeLock('1900-01-01');

    > FiniFile.WriteString(Section,Section,H);

    > end;

    > Application.MessageBox('"모모모" 프로그램 사용기간이 만료되었습니다.'+#13#13 +

    > '정품을 구입하시면 제한없이 사용할 수 있으며 ' +#13#13 +

    > '많은 해택을 드립니다.' ,'확인', MB_OK);

    > sRSV.Free;

    > FiniFile.Free;

    > Regist.Free;

    > Application.Terminate;

    > end else

    > begin

    > Application.MessageBox('"모모모" 프로그램으로 오신것을 환영합니다.'+#13#13 +

    > '정품을 구입하시면 제한없이 사용할 수 있으며 ' +#13#13 +

    > '많은 해택을 드립니다.','확인', MB_OK);

    > Key := FiniFile.FileName;

    > sRSV.Free;

    > FiniFile.Free;

    > Regist.Free;

    > end;

    > end;

    > end;

    >

  • Profile
    조복기 2000.06.21 20:22


    맨위

    interface

    uses문에 아래두개를 추가시키세요

    Registry, Inifiles





    TRegIniFile하고 TRegistry는 Registry유닛에 포함되어있고

    TIniFile은 Inifiles유닛에 포함되어있습니다..



    소스에서 TRegIniFile부분에 마우스를 갖다대고 콘트롤키하고 같이 클릭해보시면

    선언되어있는 소스가 팔짝 튀어나올겁니다..^^

    헬프에서도 보면 두번째 줄에 Unit .. 어쩌고 나오죠..^

    추가시키시면 에러없을겁니다..



    수고하세요~



  • Profile
    류응철 2000.06.21 20:46
    컨트롤 + 마우스클릭해서.. 저두 해보려 했는데...

    관련소스가 안튀어나와서... 그래서 ㅠ.ㅠ(앙.. 초보당..ㅠ.ㅠ)

    정말 답변 빨리 올리시네요..정말 고맙습니다...

    조복기 wrote:

    >

    > 맨위

    > interface

    > uses문에 아래두개를 추가시키세요

    > Registry, Inifiles

    >

    >

    > TRegIniFile하고 TRegistry는 Registry유닛에 포함되어있고

    > TIniFile은 Inifiles유닛에 포함되어있습니다..

    >

    > 소스에서 TRegIniFile부분에 마우스를 갖다대고 콘트롤키하고 같이 클릭해보시면

    > 선언되어있는 소스가 팔짝 튀어나올겁니다..^^

    > 헬프에서도 보면 두번째 줄에 Unit .. 어쩌고 나오죠..^

    > 추가시키시면 에러없을겁니다..

    >

    > 수고하세요~

    >

  • Profile
    류응철 2000.06.21 18:47
    우앙 소스까지 주셨네요... 정말 감사합니다...

    밑에 있는 소스 참조 하여... 열띠미 해보겠습니다..

    앙.. 정말 감사합니다.....



    조복기 wrote:

    > 류응철 wrote:

    > > 제목 그대로입니다...

    > >

    > > 인스톨해서 한달동안만 쓸 수있게끔 하고 싶은데요...

    > >

    > > 어떻게 해야 하나요?

    > >

    > > 또는 날짜를 정해 놓고서 그날짜까지만 사용이 가능하게 하려면 어떻게 해야 합니까?

    > >

    > > 인스톨쉴드에서 해야 하나요? 아니면 프로그램상에서 해줘야 하나요?

    > >

    > > 변경이 불가하게(?) 레지스트리의 파일날짜를 비교해서 하는 방법은 없나요?

    > >

    > > 가능하다면 약간의 힌트를 부탁합니다.....

    >

    >

    > 안녕하세요~

    > 제가 일하는곳에 있는 개발프로그램중에 한 부분입니다..

    > 소스가 좀 엉망인데요 (민망~)

    > 대충 설명하면

    > 맨처음 그 프로그램이 실행될때 레지스트리값이 존재하는지 판단하고

    > 없으면 첨 실행된 시스템날짜를 Encode시켜서 레지스트리에 보관하고

    > 담에 다시 실행할때면 실행되는 날짜와 레지스트리에 기록된 날짜와 비교해서

    > 한달이 넘으면 사용을 막아버립니다..

    > 근데 중요한건 한번 한달이 넘어버리면 날짜를 1900-01-01로 기록해버려서

    > 사용자가 임으로 날짜를 조작해서 사용하지못한다는거죠..

    > (이거 꽁수인것같음^^)

    > 밑에 소스보시면

    > Section 부분이 있는데요 이 섹션이름을 사용자가 눈치못채게

    > 어려운 이름이 바꾸시면 좋겠죠?

    > 예를들어 'Usb Controller Setting' 등의 이름..

    > 아래에선 폼show에다 걸었는데 원하시는 곳에 루틴을 활용하시기바랍니다..

    > 그리고 소스 맨위에 상수로 값만 변경하면 데모 및 정품을 쉽게 변경가능할겁니다..

    >

    > 사실 전 이런거(날짜막아버리는거..) 젤 싫어하는데

    > 회사에 있다보니 어쩔수없는 현실이군여..쩝..

    > 그냥 이렇게도 쓸수있다는걸로 참고하세요

    >

    > 에러난다면 도망가야쥐..^^

    >

    > 좋은하루되세요~

    >

    >

    > Const ShareWare = False; // 데모버전(True) 정품(False) 구분

    >

    > implementation

    >

    > ..

    > ..

    >

    > procedure TISPASSF.FormShow(Sender: TObject);

    > begin

    > if ShareWare then ProgramRegist(Sender);

    > end;

    >

    > procedure TISPASSF.ProgramRegist(Sender: TObject);

    > var FIniFile:TRegIniFile;

    > Regist:TRegistry;

    > Section,Key,sPName:string;

    > a,b:Dword;

    > sRSV:TStrings;

    > H, C, D: String;

    > Ini :TIniFile;

    > BsMoneyCount, InputString: String;

    >

    > function EncodeLock(H:String) : String;

    > var Str : String;

    > i,j : integer;

    > begin

    > j := Length(H);

    > Str := H;

    > for i :=1 to Length(H) do begin

    > Str[i] := chr(ord(Str[i]) + ord(Str[j]));

    > Dec(j);

    > end;

    > Result := Str;

    > end;

    > function DecodeLock(H:String) : String;

    > var Str : String;

    > i,j : integer;

    > begin

    > j := Length(H);

    > Str := H;

    > for i :=1 to Length(H) do begin

    > Str[j] := chr(ord(Str[j]) - ord(Str[i]));

    > Dec(j);

    > end;

    > Result := Str;

    > end;

    >

    > begin

    > //Registry 읽고 쓰기

    > sRSV := TStringList.Create;

    > Key := '';

    > sRSV.Clear;

    > Regist := TRegistry.Create;

    > Regist.RootKey := HKEY_CURRENT_USER;

    > FiniFile := TRegIniFile.Create('SOFTWARE'); // License

    > Section := 'License'; // <= 이부분에 류응철님이 원하시는 레지스트리이름을 적으세요~

    > FiniFile.ReadSectionValues(Section,sRSV);

    > if (sRSV.Count = 0) then // 없으면 프로그램 시작일을 Registry에 저장한다.

    > begin

    > H := EncodeLock(FormatDateTime('YYYY-MM-DD',Date));

    > FiniFile.WriteString(Section,Section,H);

    > Application.MessageBox('"모모모" 프로그램으로 오신것을 환영합니다.'+#13#13 +

    > '이 프로그램은 연습용으로써 '+ #13#13 +

    > '최초 실행일부터 한달(30일)간 사용할 수 있습니다.', MB_OK);

    > Key := FiniFile.FileName;

    > sRSV.Free;

    > FiniFile.Free;

    > Regist.Free;

    > end else

    > begin

    > a := Pos('=',sRSV[0]); b := Length(sRSV[0]);

    > H := DecodeLock(Copy(sRSV[0],a+1,b-a));

    > if (StrToDate(H) < Date - 30) or (StrToDate(H) > Date + 30) then

    > begin

    > if H <> '1900-01-01' then

    > begin

    > H := EncodeLock('1900-01-01');

    > FiniFile.WriteString(Section,Section,H);

    > end;

    > Application.MessageBox('"모모모" 프로그램 사용기간이 만료되었습니다.'+#13#13 +

    > '정품을 구입하시면 제한없이 사용할 수 있으며 ' +#13#13 +

    > '많은 해택을 드립니다.' ,'확인', MB_OK);

    > sRSV.Free;

    > FiniFile.Free;

    > Regist.Free;

    > Application.Terminate;

    > end else

    > begin

    > Application.MessageBox('"모모모" 프로그램으로 오신것을 환영합니다.'+#13#13 +

    > '정품을 구입하시면 제한없이 사용할 수 있으며 ' +#13#13 +

    > '많은 해택을 드립니다.','확인', MB_OK);

    > Key := FiniFile.FileName;

    > sRSV.Free;

    > FiniFile.Free;

    > Regist.Free;

    > end;

    > end;

    > end;

    >