CnIISCtrl.pas 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. {******************************************************************************}
  2. { CnPack For Delphi/C++Builder }
  3. { 中国人自己的开放源码第三方开发包 }
  4. { (C)Copyright 2001-2016 CnPack 开发组 }
  5. { ------------------------------------ }
  6. { }
  7. { 本开发包是开源的自由软件,您可以遵照 CnPack 的发布协议来修 }
  8. { 改和重新发布这一程序。 }
  9. { }
  10. { 发布这一开发包的目的是希望它有用,但没有任何担保。甚至没有 }
  11. { 适合特定目的而隐含的担保。更详细的情况请参阅 CnPack 发布协议。 }
  12. { }
  13. { 您应该已经和开发包一起收到一份 CnPack 发布协议的副本。如果 }
  14. { 还没有,可访问我们的网站: }
  15. { }
  16. { 网站地址:http://www.cnpack.org }
  17. { 电子邮件:master@cnpack.org }
  18. { }
  19. {******************************************************************************}
  20. unit CnIISCtrl;
  21. {* |<PRE>
  22. ================================================================================
  23. * 软件名称:网络通讯组件包
  24. * 单元名称:实现IIS配置功能单元
  25. * 单元作者:rarnu(rarnu@cnpack.org)
  26. * 备 注:
  27. * 开发平台:Windows2003 Server + Delphi2007 up2
  28. * 兼容测试:Windows2000/XP/2003/Vista + Delphi 7/2006/2007/2009
  29. * 本 地 化:该单元中的字符串均符合本地化处理方式
  30. * 单元标识:$Id$
  31. * 修改记录:2008.08.14 V1.0
  32. * 创建单元
  33. ================================================================================
  34. |</PRE>}
  35. interface
  36. {$I CnPack.inc}
  37. uses
  38. SysUtils, Classes, ComObj, Windows;
  39. type
  40. TCnIISCtrl = class(TComponent)
  41. private
  42. FOnDeleteVirtualDirApp: TNotifyEvent;
  43. FOnDeleteVirtualDir: TNotifyEvent;
  44. FOnCreateVirtualDir: TNotifyEvent;
  45. protected
  46. public
  47. constructor Create(AOwner: TComponent); override;
  48. {* 检查是否存在 .NET FrameWork }
  49. function CheckDotNetFramework: Boolean;
  50. {* 删除虚拟目录应用程序名 }
  51. function DeleteVirtualDirApp(strVirtualDir: string): Boolean;
  52. {* 删除虚拟目录 }
  53. function DeleteVirtualDir(strVirtualDir: string): Boolean;
  54. {* 检测是否有虚拟目录 }
  55. function CheckVirtualDir(const strVirtualDir: string): Boolean;
  56. {* 建立虚拟目录 }
  57. function CreateVirtualDir(const strVirtualDir, strDir, strAppName: string): Boolean;
  58. published
  59. {* 删除虚拟目录应用程序名时触发事件 }
  60. property OnDeleteVirtualDirApp: TNotifyEvent read FOnDeleteVirtualDirApp write FOnDeleteVirtualDirApp;
  61. {* 删除虚拟目录时触发事件 }
  62. property OnDeleteVirtualDir: TNotifyEvent read FOnDeleteVirtualDir write FOnDeleteVirtualDir;
  63. {* 建立虚拟目录时触发事件 }
  64. property OnCreateVirtualDir: TNotifyEvent read FOnCreateVirtualDir write FOnCreateVirtualDir;
  65. end;
  66. implementation
  67. { TCnIISCtrl }
  68. function TCnIISCtrl.CheckDotNetFramework: Boolean;
  69. var
  70. SysDir: pchar;
  71. begin
  72. GetMem(SysDir, 250);
  73. GetSystemDirectory(SysDir, 250);
  74. if not FileExists(SysDir + '\MSCOREE.DLL') then
  75. Result := False
  76. else
  77. Result := True;
  78. FreeMem(SysDir);
  79. end;
  80. function TCnIISCtrl.CheckVirtualDir(const strVirtualDir: string): Boolean;
  81. var
  82. WebSite, WebServer, WebRoot: Variant;
  83. begin
  84. Result := True;
  85. try
  86. WebSite := CreateOleObject('IISNamespace');
  87. WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc');
  88. WebServer := WebSite.GetObject('IIsWebServer', '1');
  89. WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');
  90. WebRoot.GetObject('IIsWebVirtualDir', strVirtualDir);
  91. except
  92. Result := False;
  93. end;
  94. end;
  95. constructor TCnIISCtrl.Create(AOwner: TComponent);
  96. begin
  97. inherited Create(AOwner);
  98. end;
  99. function TCnIISCtrl.CreateVirtualDir(const strVirtualDir, strDir,
  100. strAppName: string): Boolean;
  101. var
  102. WebSite, WebServer, WebRoot, vdir: Variant;
  103. begin
  104. Result := True;
  105. try
  106. WebSite := CreateOleObject('IISNamespace');
  107. WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc');
  108. WebServer := WebSite.GetObject('IIsWebServer', '1');
  109. WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');
  110. vdir := WebRoot.Create('IIsWebVirtualDir', strVirtualDir);
  111. vdir.AccessRead := True; // 允许读取
  112. vdir.AccessScript := True; // 执行许可为纯脚本
  113. vdir.DefaultDoc := 'index.aspx,index.asp'; // 默认文档
  114. vdir.EnableDirBrowsing := False; // 允许浏览目录
  115. vdir.AppFriendlyName := strAppName; // 应用程序名
  116. vdir.Path := strDir; // 虚拟目录真实路径
  117. vdir.AppCreate(True); // 虚拟目录自动创建应用程序名
  118. vdir.SetInfo;
  119. except
  120. Result := False;
  121. end;
  122. (************************************************************)
  123. (* IIS 其他各项参数列表于此,可根据需要修改 *)
  124. (* *)
  125. (* vdir.AccessWrite := True; // 允许写入 *)
  126. (* vdir.AccessSource := True; // 允许脚本资源访问 *)
  127. (* vdir.AccessExecute := True; // 允许可执行文件 *)
  128. (************************************************************)
  129. if Assigned(FOnCreateVirtualDir) then
  130. FOnCreateVirtualDir(Self);
  131. end;
  132. function TCnIISCtrl.DeleteVirtualDir(strVirtualDir: string): Boolean;
  133. var
  134. WebSite, WebServer, WebRoot: Variant;
  135. begin
  136. Result := True;
  137. try
  138. WebSite := CreateOleObject('IISNamespace');
  139. WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc');
  140. WebServer := WebSite.GetObject('IIsWebServer', '1');
  141. WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');
  142. WebRoot.Delete('IIsWebVirtualDir', strVirtualDir);
  143. except
  144. Result := False;
  145. end;
  146. if Assigned(FOnDeleteVirtualDir) then
  147. FOnDeleteVirtualDir(Self);
  148. end;
  149. function TCnIISCtrl.DeleteVirtualDirApp(strVirtualDir: string): Boolean;
  150. var
  151. WebSite, WebServer, WebRoot, vdir: Variant;
  152. begin
  153. Result := True;
  154. try
  155. WebSite := CreateOleObject('IISNamespace');
  156. WebSite := WebSite.GetObject('IIsWebService', 'localhost/w3svc');
  157. WebServer := WebSite.GetObject('IIsWebServer', '1');
  158. WebRoot := WebServer.GetObject('IIsWebVirtualDir', 'Root');
  159. vdir := WebRoot.GetObject('IIsWebVirtualDir', strVirtualDir);
  160. vdir.AppDelete;
  161. vdir.SetInfo;
  162. except
  163. Result := False;
  164. end;
  165. if Assigned(FOnDeleteVirtualDirApp) then
  166. FOnDeleteVirtualDirApp(Self);
  167. end;
  168. end.