Visual studio 2010 Visual Studio控制台应用程序安装程序-计划Windows任务

Visual studio 2010 Visual Studio控制台应用程序安装程序-计划Windows任务,visual-studio-2010,installation,wix,scheduled-tasks,Visual Studio 2010,Installation,Wix,Scheduled Tasks,有人知道如何使用VisualStudio2010创建Windows计划程序任务的安装项目吗?我正在为一个控制台应用程序构建一个安装程序,它需要每X分钟运行一次,如果客户不必手动安排它,那就太好了 谢谢 在Wix(.wixproj)中,您可以在一个用Jscript编写的CustomAction中执行该操作,该操作调用 我不知道VS2010对WIX的支持,我认为它是内置的 自定义操作模块(.js文件)应具有运行schtasks命令的功能,如下所示: function RunSchtasksCmd(c

有人知道如何使用VisualStudio2010创建Windows计划程序任务的安装项目吗?我正在为一个控制台应用程序构建一个安装程序,它需要每X分钟运行一次,如果客户不必手动安排它,那就太好了

谢谢

在Wix(.wixproj)中,您可以在一个用Jscript编写的CustomAction中执行该操作,该操作调用

我不知道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有自己的自定义操作,用于创建windows任务并对其进行调度

<CustomAction Id="CreateScheduledTask" Return="check" Directory="Application" ExeCommand="&quot;[SystemFolder]SCHTASKS.EXE&quot; /CREATE /SC DAILY /TN &quot;My Task&quot; /ST 12:00:00 /TR &quot;[INSTALLLOCATION]Apps\File.exe&quot; /RU [%USERDOMAIN]\[LogonUser]" />

上面的命令将创建一个名为“我的任务”的任务,该任务将在每天上午12点执行


命令用于创建和安排windows任务。

这是一种方法,但WIX内置了更好的自定义操作。啊,我不知道。使用内置的东西要好得多。我确实试过了,让它工作起来,但这是一点工作!谢谢你的回答。看起来你花了一些时间在这上面,我真的很感激!埃里克,不客气。我没有花太多时间回答你的问题。我自己也有一个类似的问题,不久前已经解决了,所以我只是把我为自己写的东西转化为你的情况。那是2分钟。不管怎样,我很高兴这是有益的。我不知道运行schtasks的内置自定义操作。看起来更简单。在我的例子中,我需要解析命令的输出,因此仅仅使用内置功能执行命令是不够的。您可能不关心输出。谢谢。这是迄今为止给出的两种方法中最简单的一种。