gpt4 book ai didi

windows-installer - 将 MSIUSEREALADMINDETECTION 添加到 MSI 的脚本

转载 作者:行者123 更新时间:2023-12-04 06:30:12 25 4
gpt4 key购买 nike

任何人都有本着 this handy script 精神的脚本(JScript、VBScript 或类似的)但添加 MSIUSEREALADMINDETECTION属性(property)

我知道我可以手动使用 Orca 或使用它的转换功能,但我不想去那里。

最佳答案

一些引用

  • Windows Installer SDK - Execute SQL Statements
  • wirunsql.vbs

  • 修改问题中引用的 CustomAction_NoImpersonate.js 给出了这个脚本,它可以在属性表中添加/设置任何值。

    使用“cscript.exe MSI_SetProperty.js your.msi 属性值”调用
    // MSI_SetProperty.js <msi-file> <property> <value>
    // Performs a post-build fixup of an msi to set the specified property (and add it if it doesn't already exist)

    // Constant values from Windows Installer SDK
    var msiOpenDatabaseModeTransact = 1;
    var msiViewModifyInsert = 1;
    var msiViewModifyUpdate = 2;

    if (WScript.Arguments.Length != 3)
    {
    WScript.StdErr.WriteLine("Usage: " + WScript.ScriptName + "file property value");
    WScript.Quit(1);
    }

    var filespec = WScript.Arguments(0);
    var property = WScript.Arguments(1);
    var value = parseInt(WScript.Arguments(2));
    var installer = WScript.CreateObject("WindowsInstaller.Installer");
    var database = installer.OpenDatabase(filespec, msiOpenDatabaseModeTransact);

    WScript.StdOut.WriteLine("Looking for property:" + property);

    try
    {
    var sql = "SELECT Property, Value FROM Property WHERE Property = '" + property + "'";
    var view = database.OpenView(sql);
    view.Execute();
    var record = view.Fetch();

    if (record)
    {
    while (record)
    {
    WScript.StdOut.Write("Found: " + record.StringData(0) + ", " + record.StringData(1) + ", " + record.StringData(2));
    if (record.IntegerData(2) != value)
    {
    WScript.StdOut.WriteLine(" - changing to " + value);
    record.IntegerData(2) = value;
    view.Modify(msiViewModifyUpdate,record);
    }
    else
    WScript.StdOut.WriteLine(" - OK");

    record = view.Fetch();
    }
    }
    else
    {
    WScript.StdOut.WriteLine("Not found, so adding");
    // There may be a better way to do this?
    sql = "INSERT INTO Property (Property,Value) VALUES ('" + property + "','" + value + "')";
    view = database.OpenView(sql);
    view.Execute();
    }
    view.Close();
    database.Commit();
    }
    catch(e)
    {
    WScript.StdErr.WriteLine(e);
    WScript.Quit(1);
    }

    关于windows-installer - 将 MSIUSEREALADMINDETECTION 添加到 MSI 的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/312490/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com