Windows installer Web安装项目中的虚拟目录
我有一个web安装项目,默认情况下在textbox安装程序屏幕中显示虚拟目录。我希望用户不能编辑虚拟目录名,并始终默认为我在msi中设置的名称。如何实现这一点?切换到并使用它们的选择您的安装项目,查看>编辑器>用户界面,选择安装地址对话框,然后删除它们 编辑: 正如Shay指出的,用户可以从命令行覆盖默认安装位置。要覆盖此设置,应在InstallExecuteSequence中设置TARGETDIR属性。很遗憾,您无法从Visual Studio更改此序列,您必须使用Orca:Windows installer Web安装项目中的虚拟目录,windows-installer,web-setup-project,Windows Installer,Web Setup Project,我有一个web安装项目,默认情况下在textbox安装程序屏幕中显示虚拟目录。我希望用户不能编辑虚拟目录名,并始终默认为我在msi中设置的名称。如何实现这一点?切换到并使用它们的选择您的安装项目,查看>编辑器>用户界面,选择安装地址对话框,然后删除它们 编辑: 正如Shay指出的,用户可以从命令行覆盖默认安装位置。要覆盖此设置,应在InstallExecuteSequence中设置TARGETDIR属性。很遗憾,您无法从Visual Studio更改此序列,您必须使用Orca: 构建安装项目 从
Org不允许开源或GPL开源 解决方案: *编辑自定义操作(右键单击>查看>自定义操作)以修复虚拟目录和路径 更改customactiondata:
/targetdir="[TARGETDIR]\" /connectionstring="[CONNECTIONSTRING]" /targetvdir="[TARGETVDIR]" /targetsite="[TARGETSITE]"
致:
您可以只从用户界面中删除安装地址,然后安装一个将信息传递给自定义安装的组件
- 使用msbuildtasks在msbuild上编写包装器
如果不希望用户更改虚拟目录,只需从用户界面中删除“安装地址”对话框即可
TARGETVDIR-要在指定站点中创建的虚拟目录。
TARGETAPPPOOL—要使用的应用程序池(注意:此应用程序池必须存在,不会创建)
TARGETSITE—要创建虚拟目录的网站(注意:这是网站的元数据库值,例如:“/LM/W3svc/2”。还请注意,该网站必须存在) 可以找到安装程序的完整属性列表 如果您确实希望更好地控制IIS安装,我建议您将项目更改为标准的Windows Installer项目,并创建自定义安装操作,以便您可以通过编程方式创建应用程序池。一个开始理解编程创建这些东西的好地方是
采用这种方式的最大原因是自定义操作在提示后运行,但必须在安装程序提示前创建应用程序池和网站。理论上听起来不错,但正如我所知,不起作用,至少在设置应用程序池时不起作用。我有一个自定义操作来在我的vs2008 web安装项目中设置apppool(顺便说一句,当安装程序使用VS2005构建时,它可以正常工作)
DirectoryEntry IISVdir = new DirectoryEntry(String.Format("IIS://{0}{1}/{2}", strServer, strRootSubPath, Vdir));
IISVdir.Properties["AppPoolId"].Value = appPool;
IISVdir.CommitChanges();
安装程序运行时没有对话框(已删除安装地址UI节点),但虚拟目录上的AppPool集最终成为DefaultAppPool
我的助手类中的其他自定义操作确实可以运行和工作
所以肯定还需要一些其他的魔法咒语
谢谢。低技术解决方案:在notepad++中编辑vdproj文件以设置虚拟目录,并从用户界面编辑器中删除安装地址对话框。适用于VS中的我
此外,如果无法实现这一点,那么如何使用Context.Parameters[]获取更改的虚拟目录的值?我正在查看websetup项目,因为我对开源不感兴趣,因为org不允许它。Wix是由Microsoft编写和维护的,它应该是Visual Studio 10的一部分。许多发起者(包括Office 2007设置)使用Wix时没有任何问题。dele
DirectoryEntry IISVdir = new DirectoryEntry(String.Format("IIS://{0}{1}/{2}", strServer, strRootSubPath, Vdir));
IISVdir.Properties["AppPoolId"].Value = appPool;
IISVdir.CommitChanges();