我有一个用c#编写的自定义操作,可以管理计划任务。 CA使用ScheduledTasks表并基于this article。目前一切都运作良好,除了一个关键的事情: - )
我在使用此表的ExeAction列时遇到问题,该列应该表示计划任务要运行的EXE的完整路径和名称。安装程序运行时,会将EXE文件放在正确的目录中,并创建计划任务;但是,任务的exe操作始终包含我的.wix文件中指定的文件的原始ID(例如,[#fil489D713AB5785D45D8F9A2BC3ACD7847]),而不是我们正在安装的EXE的实际文件名。创建的任务的导出如下所示:
<Actions Context="Author">
<Exec>
<Command>[#fil489D713AB5785D45D8F9A2BC3ACD7847]</Command>
</Exec>
</Actions>
这是我的CA的破产......
ScheduledTasks表定义中的列定义:
<!-- Actions -->
<columnDefinition
name="ExeAction"
length="255"
type="string"
category="formatted"
modularize="property"
nullable="no"
description="The path of the executable to run." />
在InstallFiles之后安排的立即自定义操作方法中,我从行中提取ExeAction列,最终将值存储在会话中的CustomActionData实例中:
CustomActionData data = new CustomActionData();
CustomActionData details = new CustomActionData();
details["ExeAction"] = row["ExeAction"].ToString();
...
session["CreateScheduledTaskDeferred"] = data.ToString();
在相应的立即自定义操作方法之后安排的延迟自定义操作方法中,我从会话中提取ExeAction值并将值传递给将创建计划任务的ScheduledTasks库:
string exeAction = details["ExeAction"];
task.Actions.Add(new ExecAction(exeAction));
在我的主.wix文件中使用预定任务自定义操作如下:
<st:ScheduledTask
Id="stask1F47C88A6951460CBE8973F741521206"
ExeAction="[#fil489D713AB5785D45D8F9A2BC3ACD7847]"
... />
我尝试了以下内容:
我现在还不确定问题是什么。我试图浏览一些现有的wix扩展;但是,我找不到CA在.Net中写的任何地方。在指定可以包含属性的列时,这些扩展的XML表定义似乎使用了相同的modularize =“property”属性,这与我在此处所做的相符。
任何建议都将不胜感激。