我有一个 Web 设置项目,默认情况下在文本框安装程序屏幕中显示虚拟目录。我希望虚拟目录名称不能由用户编辑,并且始终默认为我在我的 msi 中设置的那个。如何做到这一点?
8 回答
如果您不希望用户更改虚拟目录,您可以简单地从用户界面中删除“安装地址”对话框。
- 右键单击安装程序项目并选择“用户界面”。
- 展开“开始”节点。
- 右键单击“安装地址”。
- 选择“删除”
如果您想要网站、虚拟目录、通常由安装地址对话框选择的应用程序池的不同参数,您可以使用其他人描述的自定义操作覆盖。
但是,根据我的经验,自定义操作无助于设置用户可以更改的默认值,因为它们在要求用户输入的对话框之后执行。
设置一些用户可以在必要时在对话框中覆盖的默认值的最简单方法是执行以下操作。
- 删除欢迎页面。
- 添加文本框对话框(例如“文本框 (A)”)
- 将所有文本框的 Visible 属性更改为 false,以便不显示文本框。
- 更改 BannerBitmap 和 BodyText 属性,使其看起来有点像欢迎页面。
- 在“编辑***<n> 属性”中设置您想要覆盖的必要属性,并在“编辑<n>***值”中设置默认值。
最有用的属性(恕我直言)是。
TARGETDIR - 要复制文件的位置。
TARGETVDIR - 要在指定站点中创建的虚拟目录。
TARGETAPPPOOL - 要使用的应用程序池(注意:必须存在,不会创建)
TARGETSITE - 要创建虚拟目录的网站(注意:这是网站的元数据库值...例如:“/LM/W3svc/2”。还要注意该站点必须存在)。
可以在此处找到安装程序的完整属性列表。
如果您真的想要更好地控制 IIS 设置,我建议您将项目更改为标准 Windows Installer 项目并创建自定义安装操作,以便您可以通过编程方式创建 AppPools。开始了解以编程方式创建这些东西的好地方是这里。
这样做的最大原因是自定义操作在提示后运行,但必须在安装程序提示之前创建应用程序池和网站。
理论上听起来不错,但据我所知,它不起作用,至少不适用于设置 AppPool。我有一个自定义操作来在我的 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。
我的助手类中的其他自定义操作确实可以运行和工作。
所以肯定还需要一些其他的魔法咒语。
谢谢。
为了使用 Context.Parameters 获取虚拟目录
- 添加自定义操作以安装节点(如果您想知道如何添加自定义操作,请使用此url )
- 右键单击自定义操作并选择属性窗口。
- 对于 CustomActionsData 属性集 /targetvdir="[TARGETVDIR]"。
- 现在在您的安装程序类中,您可以通过 Context.Parameters["targetvdir"] 获取虚拟目录名称。希望这对你有帮助:)
Lo-tech 解决方案:在 notepad++ 中编辑 vdproj 文件以设置虚拟目录并从用户界面编辑器中删除安装地址对话框。
选择您的安装项目,查看 > 编辑器 > 用户界面,选择安装地址对话框,然后将其删除。
编辑:
正如 Shay 指出的那样,用户可以从命令行覆盖默认安装位置。要覆盖它,您应该在 InstallExecuteSequence 中设置 TARGETDIR 属性。不幸的是,您无法从 Visual Studio 更改此序列,您必须使用 Orca:
- 构建您的安装项目。
- 从 Orca 打开 MSI 文件。
- 使用 Source "TARGETDIR"(不带引号)、目标文件夹的 Target 和 Action 的唯一名称创建一个类型 51(设置属性)的新自定义操作(约定是使用带有初始下划线的 GUID)。
- 在 InstallExecuteSequence 中创建一个新行,其中 Action 是您的唯一名称,Condition 是“NOT Installed”,使用 TARGETDIR 之前的序列号(750 是我制作的示例中的第一次使用,所以我使用了 555 的序列) .
Org 不允许开源,或者 GPL 开源。
解决方案: * 编辑自定义动作(右键>查看>自定义动作)修复虚拟目录和路径更改customactiondata:
/targetdir="[TARGETDIR]\" /connectionstring="[CONNECTIONSTRING]" /targetvdir="[TARGETVDIR]" /targetsite="[TARGETSITE]"
至:
/targetdir="[TARGETDIR]\" /connectionstring="[CONNECTIONSTRING]" /targetvdir="FIXED_NAME" /targetsite="[TARGETSITE]"
您可能只是从用户界面中删除安装地址,并设置一个将信息传递给自定义安装的组件
- 使用 msbuildtasks 在 msbuild 上编写一个包装器
对我来说 VS
右键单击设置项目
查看 -> 文件系统
Web 应用程序文件夹(在左窗格中)
在属性窗口中(右下角)
虚拟目录(最后一个)
在这里,您可以更改/设置 IIS 上的默认路径,即可以安装的目标目录。