1

Visual Studio 2005 を使用して VB.Net で記述されたアプリケーションがあります。このアプリケーションにより、ユーザーはプロジェクト ファイルを作成および保存できます。アプリケーションを配布するとき、いくつかのデモ プロジェクト ファイルを含めて、共通アプリケーション データ フォルダにインストールします。

XP - C:\Documents and Settings\All Users\Application Data

Vista & 7 - C:\プログラム データ

予期しない動作を発見しました。共通アプリケーション データ フォルダ内のいずれかのファイルが削除され、アプリケーションがスタート メニューから実行されると、インストール手順が開始され、不足しているファイルを復元しようとします。MSI ファイルが元の場所に存在しないか、変更されている場合、アプリケーションは実行できません。これは「機能」であると認識していますが、それは私が望んでいない機能です。何が起こっているのか、どうすれば回避できるのか、誰か教えてもらえますか?

詳細:

  • Visual Studio 展開プロジェクトを使用してセットアップ パッケージを作成しました。

  • EXE を直接起動すると、この動作は発生しません。したがって、この動作はスタート メニューのショートカットと関係があると思います。ショートカットが通常のショートカットではないことに気付きました。「ターゲットの場所」がありません。

すべてのアドバイスをいただければ幸いです。

-TC

4

1 に答える 1

1

この動作には、「Install-on-Demand」(別名「Self Heal」) と呼ばれるものが含まれることを知りました。セットアップ パッケージによって作成される通常とは異なるショートカットは、「アドバタイズ ショートカット」と呼ばれます。問題の名前がわかったので、修正方法に関する情報を簡単に見つけることができます。特に:

これらのページには豊富な情報が含まれています。この投稿に出くわす可能性のある他の人の便宜のために、私は彼らの言うことを要約します:

アドバタイズされたショートカットは、特別な機能を実行する特別なショートカットです。最も顕著なのは、ターゲットを起動する前に、損傷したアプリケーションを再インストールすることです。それらが善であるか、悪であるか、無害であるかについては、いくつかの議論があります。私の意見では、彼らはほとんどのユーザーが予期しないことを行い、それが彼らを悪者にしています。したがって、私のアプリケーションではそれらを無効にしたいと思います。

Visual Studio セットアップ プロジェクトは、既定でアドバタイズされたショートカットを生成する MSI パッケージを自動的に作成します。Setup.exe のコマンド ライン引数として DISABLEADVTSHORTCUTS=1 を使用することで、MSI パッケージをインストールするときにそのデフォルトを簡単に上書きできます。また、Orca のようなユーティリティを使用すると、MSI のプロパティとして DISABLEADVTSHORTCUTS=1 を挿入することで、デフォルトを手動で変更できます。ただし、アドバタイズされたショートカットを作成しない MSI パッケージを Visual Studio で自動的に作成する場合、それはより困難です。私はこのようにしました:

  1. 最初に、上記のリンクの 1 つで Gary Chang によって提供された DisableAdvt コードを使用して VBS ファイルを作成しました (そのコードを以下に繰り返します)。テキスト ファイルを作成し、コードを貼り付けるだけです。DisableAdvt.vbs として保存します。

  2. 次に、セットアップ プロジェクトのビルド後のイベントを作成します。正確な構文は、ファイルの場所によって異なります。私の DisableAdvt.vbs はソリューション フォルダーの "Tools" サブフォルダーにあるため、ビルド後のイベントは次のようになります。

    • "$(ProjectDir)..\Tools\DisableAdvt\DisableAdvt.vbs" "$(BuiltOutputPath)"

それは私がしなければならなかったすべてです。それは魅力のように機能します。

-TC

いくつかのメモ:

Visual Studio 2005 では、ビルド イベントへのアクセスは、セットアップ プロジェクトと他の種類のプロジェクトの場合とで異なります。ソリューション エクスプローラーでプロジェクト名をクリックし、[プロパティ] ペインで PostBuildEvent を探します。

Orca は、手動で DISABLEADVTSHORTCUTS プロパティを MSI ファイルに挿入するために使用できるユーティリティです。私のアプローチでは、オルカは必要ありません。ただし、ビルド イベントが期待どおりの変更を行っていることを確認するのに役立ちます。

ビルド イベントでは、「BuiltOuputPath」のスペルミスは意図的なものです。

これは Gary Chang の DisableAdvt.vbs コードです (21 行目のタイプミスを修正したことに注意してください -- 非常に重要です!):

Option Explicit

Const msiOpenDatabaseModeTransact = 1
Dim argNum, argCount:argCount = Wscript.Arguments.Count

Dim openMode : openMode =  msiOpenDatabaseModeTransact

' Connect to Windows installer object
On Error Resume Next
Dim installer : Set installer = Nothing
Set installer = Wscript.CreateObject("WindowsInstaller.Installer") :
CheckError

' Open database
Dim databasePath:databasePath = Wscript.Arguments(0)
Dim database : Set database = installer.OpenDatabase(databasePath, openMode) : CheckError

' Process SQL statements
Dim query, view, record, message, rowData, columnCount, delim, column

query = "INSERT INTO Property(Property, Value) VALUES ('DISABLEADVTSHORTCUTS', '1')"  
Set view = database.OpenView(query) : CheckError
view.Execute : CheckError

database.Commit

If Not IsEmpty(message) Then Wscript.Echo message
Wscript.Quit 0

Sub CheckError
  Dim message, errRec
  If Err = 0 Then Exit Sub
  message = Err.Source & " " & Hex(Err) & ": " & Err.Description
  If Not installer Is Nothing Then
    Set errRec = installer.LastErrorRecord
    If Not errRec Is Nothing Then message = message & vbLf & errRec.FormatText
  End If
Fail message
End Sub

Sub Fail(message)
  Wscript.Echo message
  Wscript.Quit 2
End Sub
于 2011-09-01T14:51:24.383 に答える