2011-10-04 21 views
3

Windowsスケジューラタスクを作成するVisual Studio 2010を使用してインストールプロジェクトを作成する方法を知っている人はいますか?私は毎分X分実行する必要があるコンソールアプリケーション用のインストーラを構築しています。これは、顧客が手動でスケジュールを設定する必要がないのがいいでしょう。Visual Studio Consoleアプリケーションインストーラ - スケジュールWindowsタスク

ありがとうございます!

答えて

0

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時に実行される「My Task」という名前のタスクを作成します。

SCHTASKSコマンドは、Windowsタスクの作成とスケジュールに使用されます。

+0

ありがとうございます。これは今までの2つのアプローチよりも簡単に動作します。 –

2

を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はスクリプトで正しく実装されていますが、うまく機能します。

+0

これは一方の方法ですが、WIXにはより良いカスタムアクションが組み込まれています。 –

+0

ああ、私はそれを知らなかった。ビルトインのものを使う方がはるかに優れています。 – Cheeso

+0

私はこれを試してそれを稼働させましたが、それはちょっとした作業でした!答えをありがとう。あなたがそれに少し時間を費やしたように見えますが、私はそれを感謝します! –

関連する問題