WIX:我的CustomAction应该在哪里以及如何创建和读取临时文件?

Che*_*eso 8 javascript iis-7 windows-installer wix

我有一个脚本CustomAction(是的,我知道所有关于不使用脚本CustomActions的意见.我有不同的意见.)

我想运行一个命令,并捕获输出.我可以使用WScript.Shell COM对象,然后调用shell.Exec().但是,这会为执行的命令闪烁一个可见的控制台窗口.

为了避免这种情况,我知道我可以使用该shell.Run()调用,并为窗口外观指定"隐藏".但是.Run()不允许我访问已执行进程的StdOut,这意味着我需要创建一个临时文件并将exe输出重定向到临时文件,然后在脚本中读取该临时文件.

一些问题:

  • 这会起作用吗?

  • 如何为临时文件生成名称?在.NET中我可以在System.IO命名空间中使用静态方法,但我在这里使用脚本.我需要确保使用RW访问权限,并且没有反病毒程序会对此产生影响.

  • 好主意?我正在努力避免使用C/C++.


如果有一种方法可以从脚本中查询IIS7中的网站,而不使用IIS6兼容包,而不使用.NET(Microsoft.Web.Administration.ServerManager),并且不执行进程(appcmd list sites),我可以避免所有这些.我已经就该主题提出了另一个问题 ; 对此的任何建议也将不胜感激.

Che*_*eso 9

回答我自己的问题......

  1. 是的,这是有效的.

  2. 在Javascript中使用Scripting.FileSystemObject.有一种GetTempName()方法可以生成适合临时使用的文件名,以及一种GetSpecialFolder()获取临时文件夹位置的方法.甚至还有一种BuildPath()方法可以将它们结合起来.

  3. 到目前为止,我没有更好的想法.

这是我使用的代码:

function GetWebSites_IIS7_B()
{
    var ParseOneLine = function(oneLine) {
        ...regex parsing of output...
    };

    LogMessage("GetWebSites_IIS7_B() ENTER");

    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 appcmd = fso.BuildPath(windir,"system32\\inetsrv\\appcmd.exe") + " list sites";

    // use cmd.exe to redirect the output
    var rc = shell.Run("%comspec% /c " + appcmd + "> " + tmpFileName, WindowStyle.Hidden, true);
    // WindowStyle.Hidden == 0
    var ts = fso.OpenTextFile(tmpFileName, OpenMode.ForReading);
    var sites = [];

    // Read from the file and parse the results.
    while (!ts.AtEndOfStream) {
        var oneLine = ts.ReadLine();
        var line = ParseOneLine(oneLine);
        LogMessage("  site: " + line.name);
        sites.push(line);
    }
    ts.Close();
    fso.DeleteFile(tmpFileName);

    return sites;
}
Run Code Online (Sandbox Code Playgroud)

  • 天啊!有人也低估了我的答案!这不仅是一个糟糕的问题,而且没有答案是好的!那好吧! (3认同)