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

时间:2011-09-20 14:02:14

标签: c# c#-3.0 windows-installer

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

例如:

  1. http://domain.com/apps/site.zip下载 Web Proeject 安装程序并安装
  2. http://domain.com/apps/mscharts.zip下载MS图表并安装
  3. 询问服务器,数据库,用户名和密码,并替换web.config
  4. 这就是我要做的事情,我知道我可以使用 DotNetInstaller 甚至Wix,但两个项目都很大,学习曲线是高,所以我创建了自己的安装程序。

    我的问题是,在我运行Process安装网页设置(Visual Studio创建的msi)之后,我怎样才能获得完整路径用户选择安装网站吗?

    需要找出web.config文件的位置,以便正确附加新的SQL Server连接值。

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

    大声思考

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

      

    在这样的环境中我能做什么

2 个答案:

答案 0 :(得分:1)

  

我的问题是,在我运行Process以安装Web设置之后(a   Visual Studio创建的msi,我怎样才能获得完整路径   用户选择安装网站吗?

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

    在Visual Studio安装项目中
  • 转到注册表编辑器
  • 在HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER
  • 下选择“软件[制造商]”键
  • 在[制造商]下添加新密钥并将其命名为

    [ProductName]的

  • 在这个新密钥中添加一个带有此值的字符串条目:

    [TARGETDIR]

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

答案 1 :(得分:1)

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

  • 首先,您必须确定web.config组件的组件GUID。使用Microsoft Orca工具打开您的MSI安装程序包(您将找到 Windows 7 SDK中的Orca工具。

  • 导航至文件表。在中搜索web.config FileName 列。请记住组件_ 列中web.config组件的ID。

  • 然后导航至组件表。使用文件表中的ID搜索您的组件。

  • 复制 ComponentId 列中的GUID。这是您的组件GUID web.config文件。 现在,使用以下代码中确定的组件GUID:

    ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\cimv2");
    
    ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_SoftwareElement WHERE SoftwareElementID='{YOUR WEB CONFIG GUID}'");
    
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
    
    ManagementObjectCollection queryCol = searcher.Get();
    
    foreach(ManagementObject m in queryCol)
    {
      Console.Out.WriteLine("Path to web.config: {0}", m["Path"]);
    }
    

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

希望,这有帮助。