8
任何人都有在this handy script精神的脚本(JScript中,VBScript或类似),但加入MSIUSEREALADMINDETECTION财产脚本MSIUSEREALADMINDETECTION添加到MSI
我知道我可以手动使用逆戟鲸或与它的变换功能,但宁愿不去那里。
任何人都有在this handy script精神的脚本(JScript中,VBScript或类似),但加入MSIUSEREALADMINDETECTION财产脚本MSIUSEREALADMINDETECTION添加到MSI
我知道我可以手动使用逆戟鲸或与它的变换功能,但宁愿不去那里。
一些裁判
修改的问题,引用的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块中,并且添加一个新的属性。另外,我的安装程序似乎仍然在系统帐户下运行,而不是用户帐户 – Dhawalk 2013-08-09 21:18:06