MSI Custom Actionは管理者権限で実行します.
3984 ワード
最近はメンテナンス前に、VS 2005が持参したインストールパッケージプロジェクトでmsiのインストールパッケージを作りました.
Custom Actionでいくつかのexeを実行するなどAdminの権限が得られず、操作が失敗したことが分かった.
オンライン検索ソリューションにより、属性の変更が必要であることが分かりましたが、これらの属性はCustom Actionを使用する必要があります.
msiの多くの属性はjsスクリプトによって追加されます.
ここではCustom Actionを追加したadmin権限を使ったシナリオを見ます.
Here are the instructions that can be used to modify an MSI built in VS 2005 to set the NoImpersote for all deferred custom actions: Copy and paste the code listed below and save it to the directory that contains the Visual Studio project you are working on with the name Cusom ActionNoImpersonate.js(or download thesample script and extract the contenst to the project directory) Open the project in Visual Studio 2005 Press F 4 to display the Propties window Click on the name of your setup/deployment project in the Solution Explorer Click on the PostBuildEvent item in the Properties window to cause a button labeled「…」to appar Click on the"…"button to display the Post-build Event Command Line dialog Add the following command line in the Post-build event command line text box:cscript.exe'$Customotion.js'(株) Build your project in Visual Studio 2005 – now all deferred custom actions will have the NoImpersonate bit set for them 以下はJSでmsiインストールパッケージのインストールが完了したらシステムを再起動する機能です.
https://msdn.microsoft.com/en-us/library/windows/desktop/aa367750(v=vs.85).aspx
Custom Actionでいくつかのexeを実行するなどAdminの権限が得られず、操作が失敗したことが分かった.
オンライン検索ソリューションにより、属性の変更が必要であることが分かりましたが、これらの属性はCustom Actionを使用する必要があります.
msiの多くの属性はjsスクリプトによって追加されます.
ここではCustom Actionを追加したadmin権限を使ったシナリオを見ます.
// Usage: CustomAction_NoImpersonate.js <msi-file>
// Performs a post-build fixup of an MSI to change all
// deferred custom actions to include NoImpersonate
// Constant values from Windows Installer
var msiOpenDatabaseModeTransact = 1;
var msiViewModifyInsert = 1
var msiViewModifyUpdate = 2
var msiViewModifyAssign = 3
var msiViewModifyReplace = 4
var msiViewModifyDelete = 6
var msidbCustomActionTypeInScript = 0x00000400;
var msidbCustomActionTypeNoImpersonate = 0x00000800
if (WScript.Arguments.Length != 1)
{
WScript.StdErr.WriteLine(WScript.ScriptName + " file");
WScript.Quit(1);
}
var filespec = WScript.Arguments(0);
var installer = WScript.CreateObject("WindowsInstaller.Installer");
var database = installer.OpenDatabase(filespec, msiOpenDatabaseModeTransact);
var sql
var view
var record
try
{
sql = "SELECT `Action`, `Type`, `Source`, `Target` FROM `CustomAction`"
view = database.OpenView(sql);
view.Execute();
record = view.Fetch();
while (record)
{
if (record.IntegerData(2) & msidbCustomActionTypeInScript)
{
record.IntegerData(2) = record.IntegerData(2) | msidbCustomActionTypeNoImpersonate;
view.Modify(msiViewModifyReplace, record);
}
record = view.Fetch();
}
view.Close();
database.Commit();
}
catch(e)
{
WScript.StdErr.WriteLine(e);
WScript.Quit(1);
}
PS:Jsの使い方がわからないなら、参考してください.Here are the instructions that can be used to modify an MSI built in VS 2005 to set the NoImpersote for all deferred custom actions:
Option Explicit
Const msiOpenDatabaseModeTransact = 1
Dim msiPath : msiPath = Wscript.Arguments(0)
Dim installer
Set installer = Wscript.CreateObject("WindowsInstaller.Installer")
Dim database
Set database = installer.OpenDatabase(msiPath, msiOpenDatabaseModeTransact)
Dim query
query = "INSERT INTO Property(Property, Value) VALUES('REBOOT', 'Force')"
Dim view
Set view = database.OpenView(query)
view.Execute
database.Commit
インストールパッケージをインストールしても、コントロールパネルにアンインストールされていないjsスクリプトが表示されます.Option Explicit
Const msiOpenDatabaseModeTransact = 1
Dim msiPath : msiPath = Wscript.Arguments(0)
Dim installer
Set installer = Wscript.CreateObject("WindowsInstaller.Installer")
Dim database
Set database = installer.OpenDatabase(msiPath, msiOpenDatabaseModeTransact)
Dim query
query = "INSERT INTO Property(Property, Value) VALUES('ARPSYSTEMCOMPONENT', '1')"
Dim view
Set view = database.OpenView(query)
view.Execute
database.Commit
一般的なMSIパッケージのプロパティ:https://msdn.microsoft.com/en-us/library/windows/desktop/aa367750(v=vs.85).aspx