2012-03-05 52 views
1

我试图让它工作几天,但仍然没有运气。NsisIIS插件在执行删除虚拟目录时失败并崩溃

操作系统:Win7 SP2 Ent x64和W2k8 R2 SP1数据中心x64。

我已经google了,只有真正的建议是三重检查DeleteVDir函数的输入参数。我做了无数次,但无论如何 - 插件崩溃,因此也是安装程序。

所以 -

可能有人在步骤(格式化傻瓜)解释 - 我需要检查和excatly什么PARAMS我需要输入什么系统状态,我需要有suuccessfuly删除的虚拟目录。

目前我有这样一个电话:

DetailPrint "Deleting Virtual Directory..." 
NsisIIS::DeleteVDir /NOUNLOAD "name_of_virtual_directory" "physical_path_of_virtual_directory" 
Pop $0 
+0

只是为了确认您没有的Unicode问题,你有其他电话NsisIIS :: *正在工作吗? – Anders 2012-03-06 02:07:03

+0

是的,创建网站,获取它的信息,创建vdir - 一切正常。只是这一个没有做得干干净净。最奇怪的是,实际VDir(以及IIS Manager中的应用程序本身)被删除。 – 2012-03-06 07:28:05

回答

1

据我所知,NsisIIS :: DeleteVDir只需要一个参数,而不是两个参数(/ NOUNLOAD不能算作一个参数)

另一个可能的问题是该字符串限制为100个字符。如果你的名字更长,你应该file a bug report here。 (从快速浏览代码看来,它似乎泄露了大量内存,您可能还想提交一个关于该问题的bug)

也可以使用系统插件调用COM接口,该代码可能是这个样子:

!include LogicLib.nsh 
!define IID_IADsContainer {001677d0-fd16-11ce-abc4-02608c9e7553} 

StrCpy $9 "NameOfItemToDelete" ;Edit this! 
System::Call 'ActiveDS::ADsGetObject(w "IIS://localhost/w3svc/1/Root", g "${IID_IADsContainer}", *i.r1)i.r0' 
${If} $0 = 0 
    System::Call 'OleAut32::SysAllocString(w "IIsWebVirtualDir")i.r2' 
    System::Call 'OleAut32::SysAllocString(w "$9")i.r3' 
    ${If} $2 <> 0 
    ${AndIf} $3 <> 0 
     System::Call '$1->15(ir2,ir3)i.r0' ;IADsContainer::Delete 
     ;If $0 is 0 then it succeeded, otherwise it failed 
     System::Call 'OleAut32::SysFreeString(ir2)' 
     System::Call 'OleAut32::SysFreeString(ir3)' 
    ${EndIf} 
    System::Call '$1->2()' ;Release 
${EndIf} 

(注:因为我没有IIS设置来测试我没有测试此代码)

+0

以同样的方式执行网站删除的参数是什么?我没有设法找到网站的相关AD对象:/ – 2012-03-06 07:56:37

+0

您可以查看NsisIIS源代码:http://toranj.git.sourceforge.net/git/gitweb.cgi?p=toranj/toranj;a=blob_plain;f = NsisIIS/NsisIIS.cpp; HB = HEAD – Anders 2012-03-06 14:17:22