20

Visual Studio 2008 を使用しており、アプリケーションのセットアップ プロジェクトを作成しました。アプリケーションには、高解像度のアイコンがあります (Vista 用)。Visual Studio にバグがあり、インストーラーが低解像度のアイコンでデスクトップ ショートカットを作成します。

このバグを Microsoft Connect ( https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=338258 ) に記録し、最終的に回答を得ました。それは、Orca を使用して msi ファイルを編集し、アイコンを置き換えることです。 . そのソリューションは正常に機能します。

ここで、そのプロセスを自動化したいので、ビルド スクリプトに含めることができます。それを行う方法はありますか?

4

5 に答える 5

38

おそらく、私が見つけた最も簡単な解決策は、Orca 内に新しい「変換」を作成し、ビルド後の手順の一部として変換を適用することでした。

1) 編集用に ORCA を使用して MSI ファイルを開きます。2) [新しい変換] をクリックします。3) Orca エディタを使用して、MSI テーブルに適用可能なすべての変更を加えます。4) [Generate transform] をクリックし、ファイルを保存します。5) ビルド イベントを編集して、ビルド後のステップで msitran を実行します。このような...

msitran -a (変換ファイルへのパス) (MSI ファイルへのパス)

MSITran.exe の詳細については、次の場所を参照してください... MSITran

これにより、インストーラーのビルドが完了すると、編集内容が MSI ファイルに自動的に適用され、カスタム VBScript が不要になります。

于 2010-06-17T17:03:12.910 に答える
12

VBS、JS (すべての Windows に組み込まれている cscript を使用) を記述して MSI を変更できます。構文はほとんど SQL に似ています。 これは、さまざまな例を示す MSDN ページです。

于 2009-05-20T08:54:44.857 に答える
7

私もこれをしなければなりませんでした-これが私のVBScriptファイルです(誰にとっても役立つ場合に備えて)...

Dim msiInstaller
Dim msiDatabase
Dim msiView
Dim msiRecord

Dim pathToMsiFile
Dim pathToIconFile

If WScript.Arguments.Count <> 2 Then
    WScript.Echo "Usage:" & vbCrLf & "  " & WScript.ScriptName & " <path-to-msi> <path-to-icon>"
    WScript.Quit
End If

Dim pathToMsi, pathToIcon
pathToMsi = WScript.Arguments(0)
pathToIcon = WScript.Arguments(1)

Set msiInstaller = CreateObject("WindowsInstaller.Installer")

Set msiRecord = msiInstaller.CreateRecord(1)
msiRecord.SetStream 1, pathToIcon

Set msiDatabase = msiInstaller.OpenDatabase(pathToMsi, 1)
Set msiView = msiDatabase.OpenView("UPDATE Icon SET Data = ? WHERE Name <> ''")
msiView.Execute msiRecord

msiDatabase.Commit

このスクリプトは、MSI データベース内のすべてのショートカット アイコンを 1 つのアイコンに置き換えます。選択する必要がある場合は、さらに作業が必要です。

于 2010-05-14T10:53:32.513 に答える
2

Orca での作業に慣れているため、Orca を使用して変更を変換ファイルとして保存し、セットアップ プロジェクトのビルド後のイベントで「msitran」を使用して適用します。
私はこれをセットアッププロジェクトで使用していますが、うまく機能します。

于 2010-04-28T06:51:20.403 に答える
2

perl スクリプトを使用して、インストーラーの msi パッケージを変更できます。これにはWin32 OLEを使用できます。Win32::OLE->newAPIを使用して MSI を開きます。MSI データベースを開き、SQL クエリを実行して更新を行います。

この perl スクリプトはビルドで使用できます。

このリンクは、必要なものを作成するのに役立つ場合があります。

于 2009-05-20T08:47:56.353 に答える