1

Visual Studio 2005でVB.Netで書かれたアプリケーションがあります。このアプリケーションでは、プロジェクトファイルを作成して保存することができます。私がアプリケーションを配布するときに、私はいくつかのデモプロジェクトファイルを含みます。これは共通のアプリケーションデータフォルダにインストールします。アプリケーションデータファイルが削除されたときにインストーラが実行されないようにするにはどうすればよいですか?

XP - C:\ DocumentsとSettings \すべてのユーザーのApplication Data \

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

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

いくつかの詳細:

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

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

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

-TC

答えて

1

私は、この動作は、「インストールオンデマンド」と呼ばれるもの(別名「セルフヒール」)を含むことを学びました。セットアップパッケージによって作成される異常なショートカットは、「Advertised Shortcuts」と呼ばれます。問題の名前がわかったので、修正方法に関する情報を見つけるのは簡単です。注目すべきこと:

それらのページには、豊富な情報を含んでいます。この記事につきまとうかもしれない他の人の便宜のために、私は彼らの言うことを要約します:

広告されたショートカットは、すばらしいことをする特別なショートカットです。特に、ターゲットを起動する前に損傷したアプリケーションを再インストールします。彼らが良い、悪い、または無害であるかどうかについていくつかの議論があります。私の意見では、彼らはほとんどのユーザーが期待していない何かを行い、それはそれらを悪にします。したがって、私は自分のアプリケーションのためにそれらを無効にしたいと思います。

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

  1. はまず、私は(私は下のそのコードを繰り返してきました)上記のリンクのいずれかにゲイリー・チャンが提供するDisableAdvtコードを使用してVBSファイルを作成しました。テキストファイルを作成し、コードに貼り付けます。 DisableAdvt.vbsとして保存します。

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

    • 「$(PROJECTDIR).. \ツール\ DisableAdvt DisableAdvt.vbs \」「$ (BuiltOuputPath)」私がしなければならなかったすべてです

。それは魅力のように働く。

-TC

いくつかの注意:

のVisual Studio 2005では、イベントを作成しますが、彼らは、プロジェクトの他のタイプのためのものよりも、セットアッププロジェクトのために別々にアクセスされます。ソリューションエクスプローラでプロジェクト名をクリックし、プロパティパネルでPostBuildEventを探します。

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

、スペルミス "BuiltOuputPathは" 意図的なものです。ここで

は(!私はライン21上のタイプミスを修正していることに注意してください - 非常に重要)ゲイリー・チャンのDisableAdvt.vbsコードです:

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 
関連する問題