我启动了一个Windows窗体项目,实质上它将下载几个Zip文件,解压缩它们并运行安装程序.msi
此外它必须能够在网站中要求替换SQL连接值在其中一个安装程序中创建
例如:
http://domain.com/apps/site.zip
下载 Web Proeject 安装程序并安装http://domain.com/apps/mscharts.zip
下载MS图表并安装web.config
这就是我要做的事情,我知道我可以使用 DotNetInstaller 甚至Wix,但两个项目都很大,学习曲线是高,所以我创建了自己的安装程序。
我的问题是,在我运行Process
安装网页设置(Visual Studio创建的msi
)之后,我怎样才能获得完整路径用户选择安装网站吗?
需要找出web.config
文件的位置,以便正确附加新的SQL Server连接值。
site.msi
仅返回使用int returnCode = process.ExitCode;
的整数值,而不是输出路径..
大声思考
我可能可以在site.msi
上创建一个自定义函数,将一些值写入注册表,然后我可以安全地阅读我的自定义安装程序......这是一个可行的选择吗?
在这样的环境中我能做什么?
答案 0 :(得分:1)
我的问题是,在我运行Process以安装Web设置之后(a Visual Studio创建的msi,我怎样才能获得完整路径 用户选择安装网站吗?
通常的方法是在注册表中编写它:
在[制造商]下添加新密钥并将其命名为
[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"]);
}
出于同样的原因,创建自定义安装程序操作以将安装路径写入注册表 也是一个好主意!
希望,这有帮助。