首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在自定义引导程序/安装程序中读取msi输出文件夹?

如何在自定义引导程序/安装程序中读取msi输出文件夹?
EN

Stack Overflow用户
提问于 2011-09-20 14:02:14
回答 2查看 269关注 0票数 0

我启动了一个Windows窗体项目,实质上它将下载多个Zip文件,取消压缩,并运行安装程序.msi,此外,它还必须能够要求在其中一个安装程序中创建的网站中替换SQL连接值。

例如:

  1. 下载安装程序并安装它
  2. http://domain.com/apps/mscharts.zip下载MS图表并安装它
  3. 询问服务器、数据库、用户名和密码,并替换web.config

这就是我想要做的,我知道我可以使用DotNetInstaller,甚至维克斯,但这两个项目都很庞大,学习曲线也很高,所以我创建了自己的安装程序。

我的问题是,在运行Process来安装web设置( Visual创建的msi )之后,如何获得用户选择在哪里安装站点的完整路径?

为了正确地追加新的Server连接值,需要这样做来找出web.config文件在哪里。

site.msi只返回使用int returnCode = process.ExitCode;的整数值,而不返回输出路径。

只是大声地想出来

我可能可以在site.msi上创建一个自定义函数,将一些值写入到注册表中,然后我可以安全地在我的自定义安装程序上读取.这是一个可行的选择吗?

,在这样的环境下,我能做什么

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-20 15:44:23

您可以使用WMI搜索安装程序的web.config组件:

  • 首先,您必须标识web.config组件的组件GUID。使用Microsoft工具打开MSI安装程序包(您将在Windows7SDK中找到Orca工具)。
  • 导航到文件表。在FileName列中搜索。记住web.config组件在Component_列中的ID。
  • 然后导航到组件表。使用在文件的表中找到的ID搜索组件。
  • 复制在ComponentId列中找到的GUID。这是web.config文件的组件GUID。现在,在以下代码中使用确定的组件GUID: ManagementScope scope = new ManagementScope(“\ROOT\cimv2 2”);ObjectQuery查询=新ObjectQuery("SELECT * FROM Win32_SoftwareElement SoftwareElementID='{YOUR }“);ManagementObjectSearcher searcher =新ManagementObjectSearcher(范围、查询);ManagementObjectCollection queryCol =searcher.Get(searcher.Get);foreach(ManagementObject M in queryCol) { Console.Out.WriteLine("Path to web.config:{0}",m"Path");}

同样,创建一个自定义安装程序操作来将安装路径写入注册表也是一个好主意!

希望这个能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2011-09-20 15:37:06

我的问题是,在运行安装web安装程序( Visual创建的msi )之后,如何获得用户选择在何处安装站点的完整路径?

通常的方法是将它写在注册表中:

  • 在Visual安装项目中,转到注册表编辑器
  • 在HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER下选择“HKEY_LOCAL_MACHINE”键
  • 在制造商下面添加一个新的密钥并命名它 ProductName
  • 在这个新键中添加一个具有此值的字符串条目: 塔格特

这样,MSI将在该注册表值中写入安装路径。然后,安装程序可以从注册表读取路径。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7486422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档