2008-11-23 18 views
8

Herkes this handy script ruhunda bir komut dosyası (JScript, VBScript veya benzeri) var amaSenaryo

ben elle Orca kullanmak veya dönüşüm özelliği ile biliyorum MSIUSEREALADMINDETECTION özelliğini ekleyerek, daha ziyade olurdu MSI MSIUSEREALADMINDETECTION eklemek için oraya gitme.

cevap

11

Bazı hakemler

söz başvurulan CustomAction_NoImpersonate.js değiştirme

Özellikler tabloda herhangi bir değer ayarlamak ekleyebilir bu komut dosyası/verir . "Cscript.exe MSI_SetProperty.js your.msi özellik değeri" MSIUSEREALADMINDETECTION altıgen değeri nedir

// 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); 
} 
+0

ile

Çağrı. MSIUSEREALADMINDETECTION 'i mi seçiyorsunuz? Bunun sebebini senaryoyu çalıştırdığımda soruyorum, her zaman başka bir bloğa gider ve yeni bir özellik eklenir. Ayrıca, yükleyicim hala kullanıcı hesabı değil, sistem hesabı altında çalışıyor gibi görünüyor. – Dhawalk