線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2014
推到 Plurk!
推到 Facebook!

請問如何在程式中設定iis的虛擬目錄,adsi方法看不太懂..

答題得分者是:ha0009
eric0218
一般會員


發表:1
回覆:5
積分:1
註冊:2003-07-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-11 09:54:36 IP:61.220.xxx.xxx 未訂閱
有看到用adsi方法,但試不出來,請問其詳細步驟為何?謝謝!
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-11 10:16:23 IP:61.30.xxx.xxx 未訂閱
你好: 我的朋友照這篇文章成功的使用該功能,你可以參考看看。 http://www.yesky.com/20010404/166909.shtml
eric0218
一般會員


發表:1
回覆:5
積分:1
註冊:2003-07-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-11 10:35:01 IP:61.220.xxx.xxx 未訂閱
"新建一个单元,声明。 unit ActiveDs; interface function ADsGetObject(const PathName: WideString; const GUID: TGUID; out I: IUnknown): HRESULT; stdcall; implementation function ADsGetObject; external 'activeds.dll' name 'ADsGetObject'; end." 這一段是要如何做,可否再詳細說明.謝謝.
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-11 10:50:35 IP:61.30.xxx.xxx 未訂閱
你好: 他是說你新增一個單元,單元內宣告一個外部函式。這樣既可。 至於方法一以後的程式碼是另一個單元的測試碼但記得要Uses 剛剛新增的單元喔。
eric0218
一般會員


發表:1
回覆:5
積分:1
註冊:2003-07-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-11 11:34:59 IP:61.220.xxx.xxx 未訂閱
剛試了,問題還是一堆. 可否將步驟很詳細的說明 1.先引入类型库(Project|Import Type Library)adsiis.dll、iisext.dll和activeds.tlb 2.新建一个单元,声明。 unit ActiveDs; interface function ADsGetObject(const PathName: WideString; const GUID: TGUID; out I: IUnknown): HRESULT; stdcall; implementation function ADsGetObject; external 'activeds.dll' name 'ADsGetObject'; end. 3.主程式用那一種方法,詳細的code為何? 我是初學delphi所以有很多地方不懂,請多關照.謝謝ha0009的回答
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-11 12:32:22 IP:61.30.xxx.xxx 未訂閱
你好: 因為我沒有實際使用過,剛剛測了第一個程式沒問題呀。 我把我測試的 Code 給你參考看看,如果需要更詳細的資源你 可以在網上仔細搜索應該有很多資料,另外在微軟的 MSDN 上 你也可以找到很好的資料,如果還不能,我再向我的朋友請教 好了< > 記住一句話...天助自助< >
procedure TForm1.Button1Click(Sender: TObject);
var
  Container: IADsContainer;
  ADs: IADs;
begin
  OleCheck (ADsGetObject('IIS://localhost/w3svc', IID_IADsContainer, IUnknown(Container)));      try
    // IIsWebServer 是關鍵字,代表要求 IIS 內的 Web 站台。
    // 第二個參數表示第幾個站台。由 1 開始。
    Ads := IADs(Container.GetObject('IIsWebServer', '1'));
    ShowMessage(ADs.ADsPath);        OleCheck (ADs.QueryInterface(IID_IADsContainer, Container));
    // IIsWebVirtualDir 也是關鍵字,表示要取得站台的目錄。
    // 第二個參數表示目錄的名稱。Root 代表根目錄。
    ADs := IADs (Container.GetObject('IIsWebVirtualDir', 'Root'));
    ShowMessage(ADs.ADsPath);        OleCheck (ADs.QueryInterface(IID_IADsContainer, Container));        // 第二個參數表示要建立的目錄名稱。
    ADs := IADs (Container.Create('IIsWebVirtualDir', 'DelphiTest'));
    // 下列程式碼是設定 ADs 物件(目前是 IIsWebVirtualDir) 的屬性
    ADs.Put('AccessRead', 'True');
    ADs.Put('Path', 'c:\Temp');
    ADs.SetInfo;
  finally
    ads := nil;
    Container := nil;
  end;
end;
eric0218
一般會員


發表:1
回覆:5
積分:1
註冊:2003-07-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-11 13:25:37 IP:61.220.xxx.xxx 未訂閱
我貼上程式 ---------------------- unit ActiveDs; interface function ADsGetObject(const PathName: WideString; const GUID: TGUID; out I: IUnknown): HRESULT; stdcall; implementation function ADsGetObject; external 'activeds.dll' name 'ADsGetObject'; end. --------------------------- unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ActiveDs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var Container: IADsContainer; ADs: IADs; begin OleCheck (ADsGetObject('IIS://localhost/w3svc', IID_IADsContainer, IUnknown(Container))); try // IIsWebServer 是關鍵字,代表要求 IIS 內的 Web 站台。 // 第二個參數表示第幾個站台。由 1 開始。 Ads := IADs(Container.GetObject('IIsWebServer', '1')); ShowMessage(ADs.ADsPath); OleCheck (ADs.QueryInterface(IID_IADsContainer, Container)); // IIsWebVirtualDir 也是關鍵字,表示要取得站台的目錄。 // 第二個參數表示目錄的名稱。Root 代表根目錄。 ADs := IADs (Container.GetObject('IIsWebVirtualDir', 'Root')); ShowMessage(ADs.ADsPath); OleCheck (ADs.QueryInterface(IID_IADsContainer, Container)); // 第二個參數表示要建立的目錄名稱。 ADs := IADs (Container.Create('IIsWebVirtualDir', 'DelphiTest')); // 下列程式碼是設定 ADs 物件(目前是 IIsWebVirtualDir) 的屬性 ADs.Put('AccessRead', 'True'); ADs.Put('Path', 'c:\Temp'); ADs.SetInfo; finally ads := nil; Container := nil; end; end; ------------------------------------ errMsg: [Error] Unit1.pas(28): Undeclared identifier: 'IADsContainer' [Error] Unit1.pas(29): Undeclared identifier: 'IADs' [Error] Unit1.pas(31): Undeclared identifier: 'OleCheck' [Error] Unit1.pas(31): Undeclared identifier: 'IID_IADsContainer' [Error] Unit1.pas(36): Missing operator or semicolon [Error] Unit1.pas(36): Incompatible types: 'HGDIOBJ' and 'String'
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-11 13:29:04 IP:61.30.xxx.xxx 未訂閱
你好: 你忘了要 uses ActiveDs_TLB, ComObj; 了呀  < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
eric0218
一般會員


發表:1
回覆:5
積分:1
註冊:2003-07-10

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-11 14:01:54 IP:61.220.xxx.xxx 未訂閱
uses ActiveDs_TLB, ComObj; 要如何知道要uses ActiveDs_TLB, ComObj; 程式己可以compile成功了,太感謝ha0009
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-11 15:01:17 IP:61.30.xxx.xxx 未訂閱
你好:    ComObj : 當你要使用 COM 時,有可能要使用到這個宣告。在這個例子里我使用了 OleCheck 所以需要。    ActiveDs_TLB : 這是最重要的單元了,因為 AD 的 COM 宣告在這。也就是 IADsContainer 與 IADs。     至於如何知道嘛......我告訴你你就知道了呀  開玩笑啦^^ src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
eric0218
一般會員


發表:1
回覆:5
積分:1
註冊:2003-07-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-11 15:23:47 IP:61.220.xxx.xxx 未訂閱
"Uses 哪一個最快的辦法是搜尋有可能的 Source " 要如何搜尋??不了解 目前己經可以run成功了 不過還需一些iis功能設定 如:1要判斷虛擬目是不已建立,否則須刪除 2.iis中要能執行指令及執行檔 我去找找看看.謝謝"ha0009"的解說
系統時間:2024-05-18 13:49:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!