質問

後方も多くの実験が、私の結論はこのWindowsインストーラは、単に悪い技術です。が、お客様がMSIファイルです。

なので、作成方法を教えてくださいMSIファイルを抽出するEXEファイルを一時ディレクトリとそのオプションと同一または類似として渡されましたのEXEファイルとは何ですか?

オプションをMSIについて説明 Msiexec(コマンドラインオプション) 低レベルの"実行"のメントmsiexecオプションパッケージです。msi).

編集:mjmarshのWiX溶液になっているように見えますが。かんたちに挑戦してみてくださいねい(収縮時間)ができ、受付となります。

編集:したら動かなかったのですが。欠片:参加-無人化をするものではありません。

とにかく、この仕事を全うするためのカスタムアクションを殺すと、親プロセス!

編集:もし誰かが掲示していることや、回答包装全体としてインストールをカスタムです。理論的には可能ですが、再起動が必要です(MSします。純4が必要で、さらに再起動もしていまhackery.だから、マトリクスのメリット:

Transparency: No. One big custom action.
Customizability: No.
Standardization: No. 
Management and reporting: No. Appears to work but will not.
Security: No benefit.
Validation: No. The hackery required to survive reboot makes this sure to not work.
Resiliency: Completely defeated.
Rollback: No. Rollback didn't work when we were using MSI anyway.
Patching & Updates: No. We have a local solution anyway.
Logging: No. Appears to work but will not.

ない。

役に立ちましたか?

解決 4

はありませんソリューション。企業のMSIインストールとして我々は(MSIのいつかの内側からEXEラッピングMSIをインストールするだけで<全角> を試してください)によるMSIネスティング問題にとにかく壊れされようとしているNSISを行ってきました。

他のヒント

あの方は$$$る。できない文書もここがこだます。

追記あり、Windowsインストーラはmaddening技術です。多くの場に集うサービスを提供することを素直にうなり複雑です。お間違いので、ご利用くださを理解します。

る場合には、これを:

無料:WiX (こちらの)

このニーカー、スニーカーのブランドをMSIファイルからXMLの設定ファイルです。ただチュートリアルのオンラインだが、ここでは焦点:

できる圧縮おEXEをインストーラでは、下記のタグのWXSファイル:

<Binary Id="MYEXE" src="<path to my exe?"/>

その後に作成するカスタムアクションを開始おEXEファイル:

<CustomAction Id="EXECA_CALLMYEXE" Return="check" Execute="deferred" BinaryKey="MYEXE"
      ExeCommand="my command line"/>

そのサイトのサービスをカスタムアクションの InstallExecuteSequence の適切なスポット(Iほとんど走り鉱山の中間のどこか InstallInitializeInstallFinalize)

<InstallExecuteSequence>
   <Custom Action="EXECA_CALLMYEXE" After="InstallInitialize"><![CDATA[Not REMOVE]]></Custom>

$$$:車InstallShield (こちらの)

最初の作成"を基本MSI"プロジェクトだと言いたい no setup.exe 発生する.設定したこのリリースを設定します。

その本質的に同じことをしていWiXって対応いたしますが、UIです。

  • まご指定のヘルパー EXEファイルを直接エディタをごEXEファイルのバイナリテーブル
  • を作成できるカスタムアクションを開始するEXEファイルからのカスタムアクションの"ノードのツリー内の左側に
  • 挿入することができます。にカスタムアクションの選択により"インストールの配列"の InstallExecuteSequence どこか間 InstallInitializeInstallFinalize としています。

いることができなくなってしれば、より詳細な内容とながる、好スタートを切っています。

私は、.MSIファイルを作成する最も簡単な方法は、使用するのだと思い WiXののます。

WiXのチュートリアルから

レッスン1 には、作成するために必要なすべてです簡単なインストールます。

ジョシュア、お客様の不満です。MSIはひと味違うと言わざるを得ない-全く新しい方法を考え展開。ただ、適正しくMSIには、最大限の展開、特に企業おります。

どの業務をあなたのインストーラEXEを達成しました。では主にファイルのコピー、COM登録および一部のレジストリに書き込み、走り複雑な設置の論理の設定データベースなど...?その理由をお願いいでしょう迅速にデータをうまく機能WIX MSIまでの放棄EXEます。

では実際の走行が可能とEXEから、MSIが要求される適切な順序で保障する原因となりますのでよりブルースをより単純せん。※場合にアプリは、いずれも小規模であり、あそんでいることになっ取らせていただきたいと思います。基本WIXに変換します。

weir'sの答えに加えて、以下のようなcustom action attributeを変更します。

<!--Run Action-->
    <CustomAction Id="RunWrappedExe"
                  Return="asyncNoWait"
                  FileKey="ApplicationFileId"
                  Execute="deferred"
                  ExeCommand=""
                  HideTarget="no"
                  Impersonate="yes"/>
Return=asyncNoWaiを返すようにするために、

exeを設定すると、待機していません。インストーラはそれが仕事だと正常に閉じません。一方、exeは、その実行を連続ます。

-Madhuresh

この方法を試してください。

MSIパッケージでは、あなたのexeファイルは、MSIのインストール後に実行されることを意味し、行動コール「インストール後にアプリケーションを起動」、そこにある(MSIが閉じられています)。

があなたのexeファイルを実行するようにしてくださいので、あなたのexeファイルは、他のMSIパッケージを起動するとき、それは最初のものと競合しません。

ウィックスはそれを行うことができます。ここでのWiX 3.5のための私のサンプルコードがあります:

<?xml version='1.0'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
   <Product Id='*' UpgradeCode="11111111-2222-3333-4444-555555555555" 
        Name='My Setup' Language='1033' Version='1.0.0.0' 
        Manufacturer='Your company'>

    <Package Description='pak' InstallerVersion='200' Compressed='yes' />

    <Media Id='1' Cabinet='setup.cab' EmbedCab='yes' />

    <Directory Id='TARGETDIR' Name='SourceDir'>
        <Directory Id="TempFolder">
            <Directory Id="INSTALLLOCATION" Name="~_tmpdir">
                <Component Id='MyComponent' DiskId='1' Guid=''>
                    <File Id="File0" Name="setup.exe" Source="setup.exe" />
                    <File Id="File1" Name="file1.txt" Source="file1.txt" />
                </Component>
            </Directory>
        </Directory>
    </Directory>

    <Feature Id='InstallFeature' Title='Install Feature' Level='1'>
        <ComponentRef Id='MyComponent' />
    </Feature>

    <!-- Run Action -->
    <CustomAction Id="RunWrapExe" Return="ignore" Execute="deferred" 
                  FileKey="File0" ExeCommand="setup.exe param here"  
                  HideTarget="no" Impersonate="no" />

    <InstallExecuteSequence>
        <Custom Action="RunWrapExe" 
                After="InstallFiles">NOT REMOVE~="ALL"</Custom>
    </InstallExecuteSequence>

   </Product>
</Wix>

私は同じ問題が持っていた(ラップEXEを、.NETのセットアップなどを含むEXEから他のMSIを呼び出します)、 そしてここに私のソリューションです:

私はInstallAwareのを使用してセットアップexeファイルを構築します。 これは、MSIで生成されたEXEをラップ独自のMSIラッパーを持っています。

これはOK作品、それがセットアップEXEファイルを起動した後、EXEは(.NETセットアップ、他のサードパーティのセットアップを含む)問題なく他のMSIを呼び出すことができますが、それは理由の起動MSI終了(「リターン」)である権利、そして、彼らは再帰的なMSIのMSIの制限を回避その方法呼び出します。

しかし - MSIの展開ツールを使用して一部の顧客(企業)は、セットアッププロセスが終了した後にのみ(終了)を返し、それが上記の解決策の問題であるためにMSI(msiexecの)が必要です。

だから、 - この問題を解決するには:

のみEXEのセットアップが終了した後に、しかし、あなたはのInstallAwareの別のユニークなオプションを使用する必要があることを利用するための返しMSIを生成し、別のMSIラッパーは(exemsi.com)があります

のInstallAwareはMSI再帰制限を回避するために、独自のネイティブエンジンを使用して、Windowsインストーラエンジンに基づいていないEXEのセットアップを生成するオプションがあります。 両方のこれらを組み合わせて、あなたは完璧なソリューションを持っています。

この質問は最初に掲載されて以来、多くの年が経過するが、これは、誰かを助けることを願っています。

簡単なトリックます:

する

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;

namespace Setup
{
    internal class Program
    {
        [DllImport("kernel32.dll")]
        private static extern IntPtr GetConsoleWindow();

        [DllImport("user32.dll")]
        private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        private static void Main(string[] args)
        {
            ShowWindow(GetConsoleWindow(), 0);
            Stream st = Assembly.GetExecutingAssembly().GetManifestResourceStream("Setup.MSI.Temp.msi");
            string path = Path.Combine(System.IO.Path.GetTempPath(), "Temp.msi");
            using (var fileStream = new FileStream(path, FileMode.Create, FileAccess.Write))
            {
                st.CopyTo(fileStream);
            }
            Process p = new Process();
            p.StartInfo.FileName = path;
            p.Start();
            p.WaitForExit();
            File.Delete(path);
        }
    }
}
(それはwixsharpとのWiXを使用しています)

私は、exeファイルやフォルダからMSIを作成するためのシンプルで無料の.NETツールを作りました http://legacy.averbouch.biz/free-msi-wrapperする

スクリーンショット

男いや、ただInno Setupののウィザードを使用します。これは、セットアップEXEではなく、MSIになります。これは、5分のようなものだとは、Windowsインストーラを持っています。

単に、それをダウンロードしてインストールし、あなたのEXEをポイントし、そして続きます画面の指示

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top