全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3237
推到 Plurk!
推到 Facebook!

解決 ActiveForm 在IE 上的安全性問題

 
frankiech
中階會員


發表:7
回覆:78
積分:52
註冊:2002-08-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-14 08:46:01 IP:61.222.xxx.xxx 未訂閱
將你的ActiveForm 中的TActiveFormFactory改成TSafeActiveFormFactory    
initialization
// TActiveFormFactory.Create(
   TSafeActiveFormFactory.Create(
      ComServer,
      TActiveFormControl,
      Txxx,
      Class_xxx,
      1,
      '',
      OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,
      tmApartment);        
TSafeActiveFormFactory 定義如下 :
    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.    
yzml
一般會員


發表:4
回覆:4
積分:1
註冊:2004-12-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-26 23:16:17 IP:218.91.xxx.xxx 未訂閱
const CATID_SafeForScripting: TGUID = '{7DD95801-9882-11CF-9FA9-00AA006C42C4}'; CATID_SafeForInitializing: TGUID ='{7DD95802-9882-11CF-9FA9-00AA006C42C4}'; 請問這裏的TGUID的值與Type Library的哪個TGUID相同?比如Type Library中有四個TGUID: LIBID_YzFTP: TGUID = '{E5E2E5ED-2E2A-4845-A9F2-DC658EEBF8F3}'; IID_IYzFTP: TGUID = '{D0B55322-B569-4A7E-B256-AEB5B1EC2828}'; DIID_IYzFTPEvents: TGUID = '{9084EA54-1ACD-42FA-A594-9D1D909391F4}'; CLASS_YzFTP: TGUID = '{5CCF17F5-E15A-4E37-A5DD-AC2C8A8CE5B8}'; 應該選哪一個TGUID填到裏面去?
frankiech
中階會員


發表:7
回覆:78
積分:52
註冊:2002-08-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-27 08:55:40 IP:61.222.xxx.xxx 未訂閱
不必修改你的 Type Library, 只要在你的Project加入上面的SafeFactory 這個Unit, 並將你的ActiveForm 中的TActiveFormFactory改成 TSafeActiveFormFactory 即可.
cwvdavid
一般會員


發表:1
回覆:4
積分:1
註冊:2005-02-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-16 18:57:24 IP:210.67.xxx.xxx 未訂閱
frankiech大大...不好意思喔...我是Delphi的初學者... 以前只寫過一般的應用程式(是用Delphi...連資料庫...做一些簡單的事) 之後就是寫Java, C , VB, ASP...... 最近因為工作的關係又回來摸Delphi了... 我試了您所說的方式... 直接在ActiveForm的Project...New一個unit...(檔名是SafeFactory) 把程式碼貼上去...(至此沒有問題...) 然後把ActiveForm 中的TActiveFormFactory改成 TSafeActiveFormFactory 然後編譯...就錯了... [Error] STUC030RImpl1.pas(2033): Undeclared identifier: 'TSafeActiveFormFactory' [Error] STUC030RImpl1.pas(2033): Missing operator or semicolon [Fatal Error] STUC03R.dpr(7): Could not compile used unit 'STUC030RImpl1.pas' 我看程式碼...有寫呀...那...我不曉得是不是少了什麼動作... 如果可能, 希望能請您再詳細一點的介紹, 謝謝您
frankiech
中階會員


發表:7
回覆:78
積分:52
註冊:2002-08-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-17 08:37:39 IP:61.222.xxx.xxx 未訂閱
你可以將     
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, 然後就跟一般的使用方法一樣 Add 到你的Project, and use it !!
cwvdavid
一般會員


發表:1
回覆:4
積分:1
註冊:2005-02-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-17 14:07:16 IP:210.67.xxx.xxx 未訂閱
不好意思喔...我又來了...    由於一直試不出來, 所以我改為...    執行Delphi→建立新的ActiveX Form→(什麼都不加) 然後, 加一個unit1.pas...把程式碼加進去... (至此仍然都是ok...)    問題仍然在ActiveX Form裡面... 只要把TActiveFormFactory改成TSafeActiveFormFactory 就一定會無法編譯...    我在想...應該是新加入的程式碼...不屬於ActiveX Form... 至於是否有細部設定, 我就真的不清楚了    我已經把檔案上傳到http://210.67.36.236/delphi/test.zip    如果您有時間的話, 可以試試看...    最後...我是用Delphi 6...(應該不會剛好是版本的問題吧...)    再一次的感謝您  發表人 -
cwvdavid
一般會員


發表:1
回覆:4
積分:1
註冊:2005-02-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-17 17:54:37 IP:210.67.xxx.xxx 未訂閱
今天試了一天...    參考 http://delphi.ktop.com.tw/topic.php?topic_id=54932  bigdogchina 大大所介紹的教學...    自己加入數位簽章...已經解決了 IE必須設安全性的問題... (但仍然需要User同意才行...)    辛苦了一天, 總算有了一點收獲...    如果大大提供的技術也能學起來, 那收獲就更多了 
frankiech
中階會員


發表:7
回覆:78
積分:52
註冊:2002-08-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-02-18 08:41:14 IP:61.222.xxx.xxx 未訂閱
在你的 unit ActiveFormImpl1 裡的uses 加入 unit1    
unit ActiveFormImpl1;    {$WARN SYMBOL_PLATFORM OFF}    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, ActiveX, AxCtrls, ActiveFormProj1_TLB, StdVcl , unit1 ;
                                                           ^^^^^^      
引言: 不好意思喔...我又來了... 由於一直試不出來, 所以我改為... 執行Delphi→建立新的ActiveX Form→(什麼都不加) 然後, 加一個unit1.pas...把程式碼加進去... (至此仍然都是ok...) 問題仍然在ActiveX Form裡面... 只要把TActiveFormFactory改成TSafeActiveFormFactory 就一定會無法編譯... 我在想...應該是新加入的程式碼...不屬於ActiveX Form... 至於是否有細部設定, 我就真的不清楚了 我已經把檔案上傳到http://210.67.36.236/delphi/test.zip 如果您有時間的話, 可以試試看... 最後...我是用Delphi 6...(應該不會剛好是版本的問題吧...) 再一次的感謝您 發表人 - >< face="Verdana, Arial, Helvetica">
cwvdavid
一般會員


發表:1
回覆:4
積分:1
註冊:2005-02-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-02-18 12:49:26 IP:210.67.xxx.xxx 未訂閱
編譯完成了~~~    可是... 還是被IE給擋下來了... IE用預設安全性...    出現訊息:【目前的安全性設定會禁止在這個畫面執行ActiveX控制項】    ......這...怎麼會這樣呢??    真可惜... IE真會擋...
系統時間:2024-11-27 22:26:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!