Q&A

  • client 에서 Active from 이 않되는 이유 [급]
안녕 하셔요 델 초보자 입니다

Active from 을 이용해서 web 프로그램를 만들었읍니다

그런데 서버에서는 아주 잘 돌아가거든요

다른 것도 잘 돌아가구 허그런디 client에서는 조금한 네모박스만 나와요

팔짝 뛰겠어요 알려주셔요

그리구 빨리빨리 해야 되는대 갈켜주셔요/////













2  COMMENTS
  • Profile
    김종호 2000.03.27 03:33
    레지스트리에 등록을 하여야만 사용이 가능한데..

    그럼 처음보는 건 사용못한다는..??

    아래 강좌를 보면 자동으로 레지스트리에 등록하는 방법도 있답니다.

    참고 하십시요.



    하영재님이 올리신 ActiveX 등록에 관한 글이 입니다.



    - ActiveX의 등록



    들어가며...



    얼마전 까지만 해도 ActiveX의 제작이나 사용은 나에겐 먼나라 같은 일이었다.

    그런데 그것이 현실로 다가올 줄이야. 흑흑...

    ActiveX의 제작까지는 델파이라는 훌륭한 매개체를 이용하여 손쉽게 작성할 수 있었다.

    그런데 문제는 바로 이 제작된 ActiveX의 등록에 있었다. 이 ActiveX의 등록 방법에 대해 간단히 알아보자.





    AcitveX의 제작...



    ActiveX의 제작은 이미 여러번 강좌나 기타 책등에서 많이 다룬 문제이므로 이곳에서는 생략하기로 하고

    실제 이렇게 제작된 ActiveX를 어떻게 Web에 보이게 할 것인지 생각해 보자.

    제작된 ActiveX는 일단 등록을 해야 한다.

    등록은 Regsvr32.exe를 이용해서 하게 되는데 일단 등록까지는 별 문제가 없을 것이다.

    이제 테스트용 HTML을 제작해서 ActiveX를 불러 오기만 하면 된다.

    이때 한가지 문제가 생긴다. 그냥 단순히 불러오기만 하는 것이라면 커다란 문제가 없다.

    그런데 이 ActiveX의 내부 Procedure나 Event를 HTML Code와 Sink 시키려면 AcitveX의 Object ID가 있어야 한다.

    애석하게도 델파이에서 생성시켜 주는 테스트용 HTML에서는 결정적으로 이 Object ID를 생성해 주지 않는다.

    하다 못해 VB도 생성해 주는 이 Object ID를 델파이에서 생성해 주지 않는다니 가슴이 몹시 아프다. 쩝...



    우리가 할 수 있는 방법은 몇가지가 있다. 직접 이 ID를 생성해 주는 것이 첫번째이고,

    두번째는 Edit Plus나 다른 툴을 이용하는 것이다.

    개발자들은 매우 게으른 사람들이란 얘기를 누군가 했었다.

    그 말인 즉 개발자들은 어떤 문제를 손쉽게 해결해 줄 수 있는 도구를 먼저 찾고 없으면

    그 도구를 만들어서라도 일을 손쉽게 해결하려는 경향이 있다는 것이다. 맞는 말이다.

    본인 또한 이런 일을 해 줄수 있는 도구를 찾았으며 곧 MS에서 무료로 제공하는 두개의 툴을 구할 수 있었다.

    'ActiveX control Pad'란 녀석과 'ActiveX Lister'란 녀석들인데 이 툴을 사용하면

    AtiveX를 개발 하고 나서 웹에 올리는데 드는 수고를 1/3로 줄여준다.



    간단히 소개를 하자면...



    'ActiveX Lister'란 녀석은 기존에 시스템에 등록되어있는 모든 ActiveX 컨트롤들은 일목 요연하게 표시하여 준다.

    그중 하나를 선택하고 복사를 하면 Clipboard에 복사를 해 주는데... HTML로 붙이기를 해 보면 그 편리함에 새삼 놀라게 된다.



    예로... 'Microsoft Forms 2.0 Image'라는 AcitveX를 선택하고 복사한 후 HTML에서 붙이기를 하면...




    Id="Microsoft Forms 2.0 Image"

    Classid="clsid:4c599241-6926-101B-9992-00000B65C6F9"

    Width=80

    Height=30





    라고 만들어 준다. 간편하지 않은가? ^^

    우리가 원했던 Object ID까지 모두 생성해서 하나의 HTML 코드로 만들어 준다. 생활에 편리함을 주는 도구이다.



    또다른 툴인 'ActiveX Control Pad'란 녀석은 그 기능에 몹시 놀라게 된다.

    Lister란 녀석은 간단히 Object를 생성하는 코드만을 만들어 주는데 반해 이 제어패드는 Object를 생성코드는 물론

    ActiveX에 정의된 모든 Procedure와 Event를 보여주며 손쉽게 이 procedure와 Event를 HTML에 붙일 수 있도록

    VBScript 코드를 자동으로 생성해 준다. 또 JAVAScript 코드로도 만들어 준단다...

    이 얼마나 고마운 녀석인가... 흑...



    이 고마운 녀석들은 www.microsoft.com/intdev/sdk 에서 모두 구할 수 있다.

    참고하자...



    이렇게 함으로써 Object ID를 생성하는 부분은 해결이 되었고...

    또다른 문제 하나... 바로 보안 경고 메시지가 뜬다는 것이다.



    "이 페이지의 ActiveX는 잠재적 위험성이 있습니다. 초기화 및 스크립트 액세스를 허용하시겠습니까?"



    라고 물어보는 Dialog 창이 매번 실행 할 때 마다 뜬다. 이 메시지는 IE의 옵션 조작으로도 안 보이게 할 방법이 없다.



    이것은 이 ActiveX 안전하다는 것을 보장하는 코드가 빠져있기 때문에 나타나는 메시지인데.

    VC++에서는 *.RGS라는 파일을 만들어주며 이 파일의 내용은 registry에 Safe Key를 추가하는 역할을 하는 코드가 들어있다.

    이 Safe Key를 Registry에 추가해야만 이 메시지를 피할 수 있는데 이 또한 애석하게도 델파이에서는 생략되어 있다.



    이것을 가능하게 해주는 'Safefactory.pas'란 파일의 풀 소스를 아래에 첨부한다.



    - safefactory.pas -



    unit SafeFactory;

    interface

    uses ComObj, ActiveX, AXCtrls;



    const

    CATID_SafeForScripting: TGUID =

    '{7DD95801-9882-11CF-9FA9-00AA006C42C4}';

    CATID_SafeForInitializing: TGUID =

    '{7DD95802-9882-11CF-9FA9-00AA006C42C4}';



    type

    TSafeActiveFormFactory = class( TActiveFormFactory )

    procedure UpdateRegistry( Register: Boolean ); override;

    end;



    TSafeActiveXControlFactory = class( TActiveXControlFactory )

    procedure UpdateRegistry( Register: Boolean ); override;

    end;



    implementation



    procedure AddSafetyKeys( const ClassID: TGUID );

    var

    ClassKey: string;

    begin

    ClassKey := 'CLSID' + GUIDToString( ClassID );

    CreateRegKey( ClassKey + 'Implemented Categories','','');

    CreateRegKey( ClassKey + 'Implemented Categories'+GUIDToString(

    CATID_SafeForScripting ),'','');

    CreateRegKey( ClassKey + 'Implemented Categories'+GUIDToString(

    CATID_SafeForInitializing ),'','');

    end;



    procedure RemoveSafetyKeys( const ClassID: TGUID );

    var

    ClassKey: string;

    begin

    ClassKey := 'CLSID' + GUIDToString( ClassID );

    DeleteRegKey( ClassKey + 'Implemented Categories'+GUIDToString(

    CATID_SafeForInitializing ));

    DeleteRegKey( ClassKey + 'Implemented Categories'+GUIDToString(

    CATID_SafeForScripting ));

    DeleteRegKey( ClassKey + 'Implemented Categories');

    end;



    {TSafeActiveFormFactory}

    procedure TSafeActiveFormFactory.UpdateRegistry( Register: Boolean ); begin

    if Register then

    begin

    AddSafetyKeys( ClassID );

    inherited UpdateRegistry( Register );

    end

    else

    begin

    RemoveSafetyKeys( ClassID );

    inherited UpdateRegistry( Register );

    end;

    end;



    {TSafeActiveXControlFactory}

    procedure TSafeActiveXControlFactory.UpdateRegistry( Register: Boolean );

    begin

    if Register then

    begin

    AddSafetyKeys( ClassID );

    inherited UpdateRegistry( Register );

    end

    else

    begin

    RemoveSafetyKeys( ClassID );

    inherited UpdateRegistry( Register );

    end;

    end;



    end.



    이 부분을 safefactory.pas로 저장하고...

    기존에 만들었던 AcitveX의 initialization 부분의 TActiveFormFactory 를 TSafeActiveFormFactory로 고쳐준다.



    예 )



    initialization

    TeActiveFormFactory.Create(

    ComServer,

    TActiveFormControl,

    TMailServer,

    Class_MailServer,

    1,

    '',

    OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL);

    end.



    이렇게 고친다... ^^



    initialization

    TSafeActiveFormFactory.Create(

    ComServer,

    TActiveFormControl,

    TMailServer,

    Class_MailServer,

    1,

    '',

    OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL);

    end.



    이렇게 함으로써 우리는 보안 메시지를 안뜨게 할 수 있게 되었다.

    이 Safefactory의 역할은 해당 CLSID에 Safe Key를 추가하는 역할을 하며 이 Key는 Registry에 등록되게 된다.



    이제 거의 끝나간다... ^^



    마지막으로 남은 문제 한가지... 바로 인증 부분이다. 이런 메시지를 본적이 있을 것이다.



    "현재 보안 설정으로는 이 페이지의 ActiveX 컨트롤을 실행할 수 없습니다.

    그러므로, 이 페이지가 정상적으로 표시되지 않을 수 있습니다."



    라는 메시지인데... 이 메시지는 인증키가 없는 ActiveX를 Load할 경우 나타내는 보안 메시지이다.

    이 메시지를 안보이게 해결하려면 IE의 보안 수준을 "낮음"으로 설정함으로써 해결 할 수 있는데

    모든 사용자에게 그렇게 설정하도록 하는것은 매우 위험한 발상이다.



    이것을 또 해결해 보자... 쩝...



    VerySign이란 인증 전문 회사를 들어보았을 것이다.

    이 VerySign이란 할일없는 회사는 인증키만 내주고 할 일없이 200달러나 받아 챙긴다. 정말 칼만 안들었지 으...



    우리같은 영세민이 어찌 간단한 ActiveX 하나때문에 200달러나 낼 수 있겠는가...

    그러나 이 인증 제도는 반드시 필요하다. ActiveX는 다른 VBScript나 JAVAScript 또 JAVA Applet과는 달리

    시스템을 파괴할 수 있는 코드를 가지고 있을 수 있기 때문이다. 맘먹기 따라 남의 하드를 말끔히 포맷 시키는 것도 가능하다.

    그렇기 때문에 안전하다는 인증을 받도록 한 것은 잘한일이다.

    그러나 역시 영세한 본인은 이 인증 코드를 직접 만들어야 했다.

    테스트를 위해 인증키를 만들 수 있도록 MS에서는 INet SDK를 공개했다.

    이것은 MSDN에서 구할 수 있는데... 이 INETSDK를 이용해서 우리는 우리가 만든 ActiveX에 인증을 할 수있다.



    사용방법은... 먼저 받은 INET SDK를 설치한다.

    그리고 나서 아래의 순서대로 차례차례 따라해보자... 반드시 Command Line에서 해야 한다는 것을 주의하자...



    1. SETREG 1 True



    2. MAKECERT -n "CN=영재의 보증서" -sv Test.Pvk Test.Cer



    3. [Create Private Key Password] 대화상자가 뜨며 암호를 요구하면

    아무 거나 입력한다. 단 기억할 수 있는 암호로... ^^



    4. CERT2SPC Test.cer Test.spc



    5. 다시 대화상자가 뜨며 암호를 요구하면 아까 암호를 넣는다.

    단, 안 물어보는 경우도 있다는 사실... ^^



    6. SIGNCODE -spc Test.spc -v Test.Pvk -n "Test" Test.OCX

    ( 여기서 Test.OCX는 내가 만든 OCX의 이름으로 대체하면 된다. )



    7. 또 대화상자가 뜨며 암호를 물어보면 아까 그 암호를 또 넣는다.

    단, 이것도 안물어 보는 경우가 있다는 사실...



    이렇게 해서 내가 만든 ActiveX에 인증 코드를 추가하였다.

    쩝... 처음이 어렵지 해 보면 무척 간단하다... 5번까지 해서 만들어둔 .spc파일과 .pvk 파일은

    두고 두고 써먹을 수 있다는 사실... 매번 6번만 다시 실행해 주면 된다.



    단, 6번은 델파이의 Web Deploy Option 대화상자에서 Code Sign Project를 Check 해주고...

    Code Sign 탭으로 가서 'Credential File' 항목에 .SPC 파일을 넣어주고 'Private Key' 항목에 .PVK 파일을 넣어줌으로써 생략할 수 있다.





    마치며...



    지금까지 말도 안되는 소릴 지껄여 봤당... 흐...

    혹시 본인과 같이 ActiveX 땜에 고민 했었던 분이 계시다면... 아마 큰 도움은 아니더라도 참고는 될 수 있을것이라 생각한다.

    아직 못 다한 얘기가 있지만 ActiveX를 제작하고 Web에 올리는데 도움이 되는 얘기를 다음번에 한 번더 해 보도록 하자...

    그럼 안농히~



  • Profile
    류종택 2000.03.26 03:10
    서버에서 잘 돌아간다는 말씀이.. 서버의 웹브로우져를 말씀하시는 거겠지요??

    여하튼 제가 짐작하는 것은 두가지 입니다..

    첫번째는 Active Form에 쓰신 콤포넌트가 등록을 해야만 사용되는 경우..

    이런 경우에는 델파이가 안깔린 컴에서 사용될 경우를 고려해서..

    해당 콤포넌트가 등록될 수 있도록해야겠지요..

    두번째는 라이센스 부분인데..

    아래 소스를 참고하셔서..

    해당 부분을 바꿔 주세요..





    From 류..



    ---------



    initialization

    TActiveFormFactory.Create(

    ComServer,

    TActiveFormControl,

    TCardGameBigOrSmall,

    Class_CardGameBigOrSmall,

    1,

    '', 0);

    // 아래는 Default로 작성되는 Parameter이다..

    // 아래대로 놔두면 라이센스 화일도 같이 배포해야 한다..

    // OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL, tmApartment);

    end.





    이현우 wrote:

    > 안녕 하셔요 델 초보자 입니다

    > Active from 을 이용해서 web 프로그램를 만들었읍니다

    > 그런데 서버에서는 아주 잘 돌아가거든요

    > 다른 것도 잘 돌아가구 허그런디 client에서는 조금한 네모박스만 나와요

    > 팔짝 뛰겠어요 알려주셔요

    > 그리구 빨리빨리 해야 되는대 갈켜주셔요/////

    >

    >

    >

    >

    >

    >

    • 윤티
    • 2000.03.27 09:26
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 박송휘
      2000.04.06 10:19
      윤티 wrote: > 이런 하드보안관이란 프로그램을 보니 > 부팅되고 나서 도스상태에서 실행되던데 > autoe...
    • 최용일
      2000.03.27 19:02
      Start-up프로그램을 실행시키는 방법에는 크게 세가지가 있습니다. 첫번째가 전통적인 방식인 autoexec....
    • 윤태훈
      2000.03.29 01:51
      최용일 wrote: > Start-up프로그램을 실행시키는 방법에는 크게 세가지가 있습니다. > > 첫번째가 전통...
    • 윤태훈
      2000.03.29 01:51
      최용일 wrote: > Start-up프로그램을 실행시키는 방법에는 크게 세가지가 있습니다. > > 첫번째가 전통...
    • 오정섭
    • 2000.03.27 07:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      2000.03.27 19:28
      오정섭 wrote: > 사용환경 : 윈98, 델파이 4 > 파라독스db를 사용하고 있는데 스트링그리드의 값을 quick...
    • 김영
    • 2000.03.27 06:06
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 범수균
      2000.03.27 09:42
      김영 wrote: > 안녕하세요 고수님들.. > > 급한데요... > > 고객관리에서 > > 문1)) > Edit에 ...
    • 델초
    • 2000.03.27 04:28
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최석기
      2000.03.27 19:24
      델초 wrote: > 두 이벤트의 차이점을 잘모르겠거든요... > 어떠한 경우에 차이를 보이는지 알려주십시요....
    • 최용일
      2000.03.27 19:09
      OnShow는 화면상에 보여졌을 때 발생하고 OnActivate는 활성화 되었을 때, 즉 입력 포커스를 가지게 되었...
    • 최종민
    • 2000.03.27 04:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.27 19:52
      현재 아이템이 8000개 있는데 10000번째 아이템을 참조하려한다든지하는 경우, 즉 리스트의 경계를 넘어선...
    • 델초
    • 2000.03.26 20:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 강인규
      2000.03.27 02:11
      질문이 어렵군요. 첫번째 질문에 대한 답변. showmodal을 해제시키는 명령은 close되겠습니다. 즉, 폼...
    • 니케
    • 2000.03.26 07:55
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 류종택
      2000.03.26 10:56
      우선 질문의 의도를 잘 이해를 못했습니다.. 여하튼 엔터키 후 다음 줄로 가는 것은.. 오브젝트 인스팩터...
    • 임형호
      2000.03.27 09:21
      류종택 wrote: > 우선 질문의 의도를 잘 이해를 못했습니다.. > 여하튼 엔터키 후 다음 줄로 가는 것은.....
    • 김종호
    • 2000.03.26 07:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 류종택
      2000.03.26 10:52
      반드시 인증키를 안사용해도 된다면.. 아래처럼 하시면 아무런 추가 작업없이.. 웹배포가 됩니다.. init...
    • 이현우
    • 2000.03.26 02:44
    • 2 COMMENTS
    • /
    • 1 LIKES
    • 김종호
      2000.03.27 03:33
      레지스트리에 등록을 하여야만 사용이 가능한데.. 그럼 처음보는 건 사용못한다는..?? 아래 강좌를 보...
    • 류종택
      2000.03.26 03:10
      서버에서 잘 돌아간다는 말씀이.. 서버의 웹브로우져를 말씀하시는 거겠지요?? 여하튼 제가 짐작하는 것...
    • 이수환
    • 2000.03.26 00:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 묻지마다쳐
      2000.03.27 03:38
      몇몇그래픽 카드와 충돌을 하는것 같더군요.. 아니면 그래픽 카드 드라이버가 잘못설정되었을지도.... ...
    • 최종민
    • 2000.03.25 23:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 류종택
      2000.03.26 00:46
      아래 소스를 참고 하세요.. 문자열을 읽는 방법만 보였는데.. 뒤의 stLine은 어떤 변수타입이라도 상관없...
    • 류종택
      2000.03.26 00:39
      질문이 상당히 어렵네요^^ 제가 이해한 대로만 설명 드릴께요.. 그리고 다른 좋은 방법도 있지만.. 간단...
    • chobo
    • 2000.03.25 22:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 류종택
      2000.03.26 00:36
      우선 ShowMessage 뿐만 아니라.. 모든 함수는 선언이 되어 있어야 사용할 수 있습니다.. 해당 함수가 선...
    • 하얀까마귀
      2000.03.25 23:50
      안녕하세요 하얀까마귀 입니다.. 아까 답변을 드렸던 까마구 입니다.. 음.. 그런데.... 디쟈인타임에...