加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-13 22:40:54 所属栏目:Windows 来源:网络整理
导读:任何人都有一个脚本(JScript,VBScript或类似的)本着 this handy script的精神,但添加了 MSIUSEREALADMINDETECTION属性 我知道我可以手动使用Orca或使用它的变换功能,但宁可不去那里. 一些参考 Windows Installer SDK – Execute SQL Statements wirunsql.vbs
任何人都有一个脚本(JScript,VBScript或类似的)本着 this handy script的精神,但添加了 MSIUSEREALADMINDETECTION属性

我知道我可以手动使用Orca或使用它的变换功能,但宁可不去那里.

一些参考

> Windows Installer SDK – Execute SQL Statements
> wirunsql.vbs

修改问题中引用的CustomAction_NoImpersonate.js会生成此脚本,该脚本可以在Properties表中添加/设置任何值.

使用“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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读