Windowsスケジューラタスクを作成するVisual Studio 2010を使用してインストールプロジェクトを作成する方法を知っている人はいますか?私は毎分X分実行する必要があるコンソールアプリケーション用のインストーラを構築しています。これは、顧客が手動でスケジュールを設定する必要がないのがいいでしょう。Visual Studio Consoleアプリケーションインストーラ - スケジュールWindowsタスク
ありがとうございます!
Windowsスケジューラタスクを作成するVisual Studio 2010を使用してインストールプロジェクトを作成する方法を知っている人はいますか?私は毎分X分実行する必要があるコンソールアプリケーション用のインストーラを構築しています。これは、顧客が手動でスケジュールを設定する必要がないのがいいでしょう。Visual Studio Consoleアプリケーションインストーラ - スケジュールWindowsタスク
ありがとうございます!
WIXには、Windowsタスクを作成してスケジューリングする独自のカスタムアクションがあります。
<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時に実行される「My Task」という名前のタスクを作成します。
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
};
}
そして、カスタムアクション機能自体からそれを使う、のようなもの一部の人々は、彼らがデバッグにハード、維持するのは難しいですか、それは右のそれを行うのは難しいので、スクリプトでCAのを書くことは、行うには間違ったことであると言うこの
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はスクリプトで正しく実装されていますが、うまく機能します。
これは一方の方法ですが、WIXにはより良いカスタムアクションが組み込まれています。 –
ああ、私はそれを知らなかった。ビルトインのものを使う方がはるかに優れています。 – Cheeso
私はこれを試してそれを稼働させましたが、それはちょっとした作業でした!答えをありがとう。あなたがそれに少し時間を費やしたように見えますが、私はそれを感謝します! –
ありがとうございます。これは今までの2つのアプローチよりも簡単に動作します。 –