我试图让它工作几天,但仍然没有运气。
操作系统:Win7 SP2 Ent x64和W2k8 R2 SP1数据中心x64。
我用谷歌搜索,只有真正的建议是三重检查DeleteVDir函数的输入参数。我已经无数次地完成了它,但无论如何 - 插件崩溃,因此安装程序也是如此。
所以 -
有人可以按步骤解释(格式化为傻瓜) - 我需要检查和激发我需要输入什么参数以及我需要具备哪些系统状态才能成功删除虚拟目录。
目前我有这样的电话:
DetailPrint "Deleting Virtual Directory..."
NsisIIS::DeleteVDir /NOUNLOAD "name_of_virtual_directory" "physical_path_of_virtual_directory"
Pop $0
答案 0 :(得分:1)
据我所知,NsisIIS :: DeleteVDir只接受一个参数,而不是两个参数(/ NOUNLOAD不算作参数)
另一个可能的问题是此字符串限制为100个字符。如果您的名字较长,则应file a bug report here。 (从快速查看代码看,它似乎泄漏了大量内存,你可能也想提交一个关于它的错误)
也可以使用系统插件调用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设置进行测试)