有誰知道如何使用創建Windows調度程序任務的Visual Studio 2010創建安裝項目?我正在爲一個需要每X分鐘運行一次的控制檯應用程序構建一個安裝程序,並且如果客戶不需要手動安排它,那將會很好。Visual Studio控制檯應用程序安裝程序 - 計劃Windows任務
謝謝!
有誰知道如何使用創建Windows調度程序任務的Visual Studio 2010創建安裝項目?我正在爲一個需要每X分鐘運行一次的控制檯應用程序構建一個安裝程序,並且如果客戶不需要手動安排它,那將會很好。Visual Studio控制檯應用程序安裝程序 - 計劃Windows任務
謝謝!
WIX有自己的自定義操作來創建窗口任務並安排它們。
<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點執行。
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
};
}
,然後使用從自定義操作功能本身,像內這
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具有內置的自定義操作,效果更好。 –
啊,我不知道。更好地使用內置的東西。 – Cheeso
我確實嘗試過並讓它工作,但它有點工作!感謝你的回答。看起來你花了一些時間在上面,而且我確實贊同它! –
謝謝。這是有效的,並且是迄今爲止給出的兩種方法中較爲簡單的方法。 –