我对Wix和WixSharp都是新手。我最近学习了Wix,并用它创建了一个基本的安装程序。我使用的一个属性是'IniFileSearch‘,它帮助我从IniFile中搜索值,并使用它来查找我的文件的安装位置。我正在尝试使用WixSharp来做同样的事情,但似乎找不到一个等效的方法。在WixSharp中我能找到的最接近的是'AppSearch‘类(在WixSharp.CommonTasks下面)。从Wix我知道'AppSearch‘是一个存储搜索任务的微星数据库表。“IniFileSearch”就是这些搜索之一。我甚至不确定WixSharp库中的'AppSearch‘类是否直接映射到'AppSearch’MSI数据库表。无论如何,我的目标是在WixSharp库中找到与“IniFileSearch”等效的方法。如果有人知道这一点,举个例子就好了。
以下是Wix标记中的示例IniFileSearch
<Property Id="MY_PROPERTY">
<IniFileSearch Id="myIniSearch"
Name="myConfigFile.ini"
Section="section1"
Key="name"
Type="raw" />
</Property>发布于 2015-09-25 00:49:16
这是我从WixSharp的创建者奥列格·希罗那里得到的答案。
因为Wix#做很多不同的事情,所以像"MSI IniFileSearch属性“这样的任务与Wix#的故事几乎是无关的。无论如何,就Wix#而言,RegValueProperty是它本机支持的唯一微星"AppSearch“任务。相反,Wix#允许您指定一个C#例程,您可以在该例程中执行任何搜索/分析,而不受MSI功能的约束。
因此,在托管CA中,您可以使用您选择的任何C#算法读取reg文件,并且只需根据需要更新会话属性:
public class CustomActions
{
[CustomAction]
public static ActionResult MyAction(Session session)
{
session["EnvVersion"] = AppSearch.IniFileValue(Environment.ExpandEnvironmentVariables(@"%windir%\win.ini"),
"System",
"Version");
}
}在上面的代码中,我使用了Wix#已经实现的IniFileValue查找例程,但是您可以使用任何替代实现。甚至互操作GetProfileString(...)。
如果使用托管安装程序,则需要将操作放在UIInitialized (或/和Load)事件处理程序中:
project.UIInitialized += project_UIInit;
...
static void project_UIInit(SetupEventArgs e)
{
e.Session["EnvVersion"] = AppSearch.IniFileValue(Environment.ExpandEnvironmentVariables("%windir%\\config.ini"),
"System",
"Version") ?? "<unknown>";
} 请记住,IniFileValue是最近才添加的,因此目前您只能从NuGet获得预发行包:
Install-Package WixSharp.bin -Version 1.0.26https://stackoverflow.com/questions/32728798
复制相似问题