将 MSIUSEREALADMINDETECTION 添加到 MSI 的脚本

Posted

技术标签:

【中文标题】将 MSIUSEREALADMINDETECTION 添加到 MSI 的脚本【英文标题】:Script to add MSIUSEREALADMINDETECTION to MSI 【发布时间】:2008-11-23 13:10:27 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

一些参考

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

【讨论】:

MSIUSEREALADMINDETECTION 的十六进制值是多少。还是您只是设置 MSIUSEREALADMINDETECTION?原因,我在运行脚本时问这个,它总是进入 else 块并添加一个新属性。另外,我的安装程序似乎仍然在系统帐户而不是用户帐户下运行

以上是关于将 MSIUSEREALADMINDETECTION 添加到 MSI 的脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何将Ios文件上传到

Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等

如何将视频文件转换格式

sh 一个将生成CA的脚本,将CA导入到钥匙串中,然后它将创建一个证书并与CA签名,然后将其导入到

python怎么将0写入文件?

如何将CMD窗口背景改成透明?