Visual Studio控制台应用程序安装程序 - 计划Windows任务
有谁知道如何使用创建Windows调度程序任务的Visual Studio 2010创建安装项目?我正在为一个需要每X分钟运行一次的控制台应用程序构建一个安装程序,并且如果客户不需要手动安排它,那将会很好。Visual Studio控制台应用程序安装程序 - 计划Windows任务
谢谢!
WIX有自己的自定义操作来创建窗口任务并安排它们。
<CustomAction Id="CreateScheduledTask" Return="check" Directory="Application" ExeCommand=""[SystemFolder]SCHTASKS.EXE" /CREATE /SC DAILY /TN "My Task" /ST 12:00:00 /TR "[INSTALLLOCATION]Apps\File.exe" /RU [%USERDOMAIN]\[LogonUser]" />
上面的命令将创建一个名为'我的任务'的任务,该任务将在每天上午12点执行。
SCHTASKS命令用于创建和调度Windows任务。
在Wix(.wixproj)中,您可以在使用Jscript编写的CustomAction中调用Schtasks.exe。
我不知道VS2010对WIX的支持,我认为它是内置的。
自定义操作模块(该.js文件)应具备的功能来运行的schtasks命令,像这样:
function RunSchtasksCmd(command, deleteOutput) {
deleteOutput = deleteOutput || false;
var shell = new ActiveXObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var tmpdir = fso.GetSpecialFolder(SpecialFolders.TemporaryFolder);
var tmpFileName = fso.BuildPath(tmpdir, fso.GetTempName());
var windir = fso.GetSpecialFolder(SpecialFolders.WindowsFolder);
var schtasks = fso.BuildPath(windir,"system32\\schtasks.exe") + " " + command;
// use cmd.exe to redirect the output
var rc = shell.Run("%comspec% /c " + schtasks + "> " + tmpFileName, WindowStyle.Hidden, true);
if (deleteOutput) {
fso.DeleteFile(tmpFileName);
}
return {
rc : rc,
outputfile : (deleteOutput) ? null : tmpFileName
};
}
,然后使用从自定义操作功能本身,像内这
var r = RunSchtasksCmd("/Create Foo bar baz");
if (r.rc !== 0) {
// 0x80004005 == E_FAIL
throw new Error("exec schtasks.exe returned nonzero rc ("+r.rc+")");
}
var fso = new ActiveXObject("Scripting.FileSystemObject");
var textStream = fso.OpenTextFile(r.outputfile, OpenMode.ForReading);
// Read from the file and parse the results.
while (!textStream.AtEndOfStream) {
var oneLine = textStream.ReadLine();
var line = ParseOneLine(oneLine); // look for errors? success?
}
textStream.Close();
fso.DeleteFile(r.outputfile);
有人说写CA的剧本是错误的做法,因为他们难以维持,难以调试,或者很难做他们的权利。我认为这些都是不好的理由。 CA在脚本中正确实施,运作良好。
这是一种方式,但WIX具有内置的自定义操作,效果更好。 –
啊,我不知道。更好地使用内置的东西。 – Cheeso
我确实尝试过并让它工作,但它有点工作!感谢你的回答。看起来你花了一些时间在上面,而且我确实赞同它! –
谢谢。这是有效的,并且是迄今为止给出的两种方法中较为简单的方法。 –