3 Stimmen

Visual Studio Console Application Installer - Windows-Task planen

Weiß jemand, wie man ein Installationsprojekt mit Visual Studio 2010 erstellt, das eine Windows Scheduler-Aufgabe erstellt? Ich baue ein Installationsprogramm für eine Konsolenanwendung, die alle X Minuten ausgeführt werden muss, und es wäre schön, wenn der Kunde dies nicht manuell planen müsste.

Danke!

2voto

Cheeso Punkte 184210

In Wix (.wixproj) können Sie dies in einer in Jscript geschriebenen CustomAction tun, die Folgendes aufruft Schtasks.exe .

Ich weiß nicht, ob VS2010 WIX unterstützt, ich glaube, es ist eingebaut.

Das benutzerdefinierte Aktionsmodul (die .js-Datei) sollte eine Funktion zur Ausführung eines schtasks-Befehls enthalten, etwa so:

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
    };
}

Und dann verwenden Sie das in der benutzerdefinierten Aktionsfunktion selbst, etwa so

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);

Manche Leute sagen, dass es falsch ist, CAs in Skripten zu schreiben, weil sie schwer zu warten oder zu debuggen sind oder weil es schwer ist, sie richtig zu machen. Ich denke, das sind schlechte Gründe. CAs, die korrekt in Skripten implementiert sind, funktionieren gut.

0voto

Sunil Agarwal Punkte 3893

WIX verfügt über eine eigene benutzerdefinierte Aktion zur Erstellung von Windows-Aufgaben und deren Planung.

<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]" />

Mit dem obigen Befehl wird eine Aufgabe mit dem Namen "Meine Aufgabe" erstellt, die täglich um 12 Uhr ausgeführt wird.

SCHTASKS wird zum Erstellen und Planen einer Windows-Aufgabe verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X