2016-08-05 9 views
3

いくつかのSQLを構成するカスタムアクションを起動するためのセットアップを作成する必要があります。WiXセットアップが同じカスタムアクションをサイレントモードと「通常の」モードで起動する

これは私の配列である。

ここ
<InstallExecuteSequence> 
    <Custom Action='StartCustomAction' After='InstallFinalize'>NOT Installed</Custom> 
</InstallExecuteSequence> 

私は私のカスタムアクションを呼び出す:

<Fragment> 
    <Binary Id="CustomActionBinary" SourceFile="$(var.InfPro.dotigaRuntimeSetup.CustomActions.TargetDir)$(var.InfPro.dotigaRuntimeSetup.CustomActions.TargetName).CA.dll"/> 
    <CustomAction Id="StartCustomAction" BinaryKey="CustomActionBinary" DllEntry="ShowInitialForm" Execute="immediate" Return="check"/> 
</Fragment> 

これは私のカスタムアクションです:

[CustomAction] 
public static ActionResult ShowInitialForm(Session session) 
{ 

    int i = Convert.ToInt32(session["UILevel"]); 
    if (i == 2) 
    { 
     StreamWriter file = new StreamWriter("c:\test.txt"); 
     file.WriteLine("Test"); 

     file.Close(); 
     } 
    else { 
     InitialForm f = new InitialForm(); 
     if (f.ShowDialog() == DialogResult.Cancel) 
      return ActionResult.UserExit; 
     } 
     return ActionResult.Success; 
} 

重要なセクションでは、IF-ですブロック。テスト目的のために、私はファイルを作成し、インストーラがサイレント実行されたときに "Test"を書きたいと思っています。 Microsoftによると、UILevelプロパティは2である必要があります。https://msdn.microsoft.com/en-us/library/windows/desktop/aa372096(v=vs.85).aspx

残念ながら何も起こりません。カスタムアクションが呼び出されたかどうかはわかりません。

私はhttp://wixtoolset.org/documentation/manual/v3/customactions/qtexec.htmlにアクセスし、カスタムアクションタグでDllEntry = "WixSilentExec"を使用できますが、DLLエントリがカスタムアクションメソッドの名前であることがわかっている限り、見ました。私の場合はShowInitialForm。

ありがとうございました。 ;)

+0

カスタムアクションが呼び出された場合、何が起きているかを見るためにmsilexec/I [path to msi]/l * vx [テキストログファイルへのパス]を入力し、UILevelプロパティの値を表示します。 WiXを使用している場合は、この情報をインストーラのUIにカスタムダイアログで収集し、プロパティにコードを渡す必要があります。 MTAを使っているmsiexecプロセスからのコールバックで、機能的なメッセージループを持つSTAウィンドウスレッドで実行されていないため、ダイアログが機能しないと思われます。 – PhilDW

+0

サイレントモードでインストーラを起動するとダイアログが正常に動作します。私は、UILevelが2であるという.logファイルを生成しました.BBRの答えに対する私のコメントを見てください。 – Maxlisui

+0

フルUIモードでこのファイルを書き込もうとしましたか? – BBR

答えて

1

ご協力いただきありがとうございます。ログは1700行の長である

msiexec /i mySetup.msi /l*v myLog.log 

や事故によって、私は、セットアップが失敗する原因となったエラーが「あなたは十分な権限を持っていないことを意味するエラー1925であることがわかった:私は、次のコマンドを使用してQuietモードで私のセットアップと呼ばれますマシンのすべてのユーザーにこのインストールを完了させます。管理者としてログオンし、このインストールを再試行してください。

私はコマンドラインで管理者としてセットアップを開始し、すべて正常に機能しました。

0

あなたはバイナリ要素に(カスタムアクションプロジェクト).CA.dllを参照してください。代わりに(カスタムアクションプロジェクト).dllを参照してください。

カスタムアクションプレースメントをベースにすると、遅延型CAである必要がありますが、即時型CAを使用しています。即時CAは現時点では呼び出されません。アクションタイプを遅延に変更します。遅延アクションがセッション変数にアクセスできないことに注意してください。あなたのCAにデータを渡すために、次のように行います。

あなたのアクションコード使用インサイド
<Custom Action='SetProperty.StartCustomAction' After='InstallFinalize'>NOT Installed</Custom> 
<Custom Action='StartCustomAction' After='SetProperty.StartCustomAction'>NOT Installed</Custom> 

<CustomAction Id="SetProperty.StartCustomAction" Property="StartCustomAction" Value="UILevel=[UILevel]" /> 
<CustomAction Id="StartCustomAction" BinaryKey="CustomActionBinary" DllEntry="ShowInitialForm" Execute="deferred" /> 

SetProperty.StartCustomAction CAは、シーケンスを実行してStartCustomAction前に呼び出されるように定義する必要があります渡された値にアクセスするこのコード:

session.CustomActionData["UILevel"] 

PhilDWのアドバイスを使用するndは常にログ出力で実行されます。デバッグ出力をログに書き込むには、次のようなコードを使用してください。

session.Log("Begin ShowInitialForm CustomAction"); 

希望します。

+0

あなたが言及したすべてを変更しましたが、インストーラは新しいCustomAction.dllを見つけることができません。私は次のエラーに遭う。 "このWindowsインストーラパッケージには手抜きがあります。このインストールを完了するために必要なDLLは実行できませんでした。 http://puu.sh/qrHLZ/4fbedb65d6.pngここでは、両方のDLLが存在することがわかります。 私はそれをCustomAction.CA.dllに戻して変更し、.logファイルを生成しました。これはUILevelが2だと言っていますが、http://puu.sh/qrHVR/d5d9caba37.pngインストーラは失敗します。 ご協力いただきありがとうございます – Maxlisui

0

msiexec/I [path to msi]/l * vx [テキストログファイルへのパス]コマンドラインでインストールして、何が起こっているのかを確認してください。 UILevelプロパティの値が表示されます。さらに、インストールがあなたのDllをまったく呼び出そうとしたかどうかをログに記録します。コードの最初のものとしてsession.logを呼び出すと、コードが開始されたかどうかがわかります(テキストはそのMSIログに表示されます)。セッションが失敗したかどうかを確認するために必要な数だけsession.logを呼び出します。

問題がDllファイルが見つからない可能性があるため、Dllが見つからないと想定することはできません。表示されたDLLを使用して投稿したpngファイル - 表示する内容が明確ではありません。 DLLはMSIファイルのバイナリテーブルにあり、呼び出される場所にストリーム配信されるため、定義上欠落することはありません。バイナリテーブルのDllは、CAとして呼び出されるように「インストールされていません」 - それらはストリームアウトされ、呼び出され、次に削除されます。 pngファイルがその一時的な場所を示しているのは明らかではありません。マネージコードのカスタムアクションを呼び出すWiX/DTFメソッドにはレイヤリングがいくつかありますが、間違った場所を探している可能性があります。あなたは、機能メッセージループを持つSTAウィンドウスレッドにする必要があるため

うまくいけば、あなたのダイアログがWiXの/ DTFで動作しますが、コードのカスタムアクションアーキテクチャを管理していました。アーキテクチャ上、このデータはUIの最初に収集され、UIが表示されない場合は、UIに設定されたプロパティ値をmsiexecコマンドライン経由で渡すことができます。 UILevelチェックはありません)。別の一般的な方法は、通常のUIデバッグ可能なテスト可能なプログラムを実行しているため、初めてアプリケーションを使用するときにプログラムを実行することです。別の方法として、実際のプログラムをexeカスタムアクションとして実行するだけです。これは通常のUIプログラム、テスト可能、デバッグ可能なものなどです。

関連する問題