2011-10-04 90 views

回答

0

WIX有自己的自定義操作來創建窗口任務並安排它們。

<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任務。

+0

謝謝。這是有效的,並且是迄今爲止給出的兩種方法中較爲簡單的方法。 –

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

,然後使用從自定義操作功能本身,像內這

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

這是一種方式,但WIX具有內置的自定義操作,效果更好。 –

+0

啊,我不知道。更好地使用內置的東西。 – Cheeso

+0

我確實嘗試過並讓它工作,但它有點工作!感謝你的回答。看起來你花了一些時間在上面,而且我確實贊同它! –

相關問題