Установщик приложения Visual Studio Console - планирование задачи Windows - PullRequest
3 голосов
/ 04 октября 2011

Кто-нибудь знает, как создать проект установки с помощью Visual Studio 2010, которая создает задачу планировщика Windows?Я создаю установщик для консольного приложения, которое должно запускаться каждые X минут, и было бы неплохо, чтобы клиент не планировал его вручную.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 04 октября 2011

в Wix (.wixproj) вы можете сделать это в CustomAction, написанном на Jscript, который вызывает 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 реализованы правильно в сценарии, работают хорошо.

0 голосов
/ 04 октября 2011

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 часов.

SCHTASKS Команда используется для создания и планирования задачи Windows.

...