6

インストールが複数回実行されると、ひどく混乱する傾向がある Visual Basic アプリを持っています。ときどき、クライアントが後でインストーラーへのショートカットを間違えて、インストーラーを再度実行すると、すべてが台無しになることがあります。私は一生理由を理解できないので、最も簡単な方法は、exeをマシンで1回だけ実行できるようにすることであると判断しました。そうしないと、終了します。何か案は?

4

11 に答える 11

6

回避するためにハックを試みるのではなく、インストーラーや発生している問題を修正しないでください...

0.02 ドル

于 2008-10-28T18:18:06.130 に答える
3

インストーラーにアプリケーション フォルダーにファイルを配置してもらいます。

再度実行すると、そのファイルが存在するかどうかを確認し、存在する場合は、「既にインストールされています」ポップアップを表示して終了します。

于 2008-10-17T19:59:32.943 に答える
2

これが VB6 の質問であると仮定すると、組み込みの App.PrevInstance を使用できます。

ドキュメント: http://msdn.microsoft.com/en-us/library/aa268085(VS.60).aspx

アプリケーションが既に実行されている場合、App.Previnstance は True を返します。

スタートアップ フォームの load イベントまたは Sub Main で:

Private Sub Form_Load()
    If App.PrevInstance = True Then
        MsgBox "Already running"
        'Do whatever you need to do before closing
    End If
End Sub

さらに一歩進んで前のインスタンスを前面に出したい場合は、次の記事をご覧ください。

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=21131&lngWId=1

http://support.microsoft.com/kb/185730

于 2008-10-20T16:34:45.770 に答える
1

.netを使用している場合は、Mutexがここでの友達です。

Process.GetProcessesByNameメソッドを使用しないでください。管理者権限を必要とするものを使用することで、後で自分自身を憎むだけです。

private bool CanIStart
{

        try
            {
                MyAppMutex= new Mutex(false, "myAppMutex", out createdNew);
                if(MyAppMutex.WaitOne(0,false))
                {
                    return true;
                }
                else
                {
                    MyAppMutex = null;
                    return false;
                }

            }
            catch(ApplicationException ex)
            {
                // we couldn't create the mutex. // log the error if you care
                return false;               
            }
}
于 2008-10-28T15:21:55.487 に答える
1

インストーラーにレジストリ エントリを作成させます。レジストリ エントリが既に存在する場合は、(再度) インストールを拒否します。

これを実現する正確な方法は、使用しているインストーラ テクノロジによって異なります。

于 2008-10-28T15:23:36.137 に答える
1

実行中にインストーラー EXE ファイル自体を削除することはできますが、実行中に直接ではなく、別のサービスに呼び出しを渡して実行後に​​削除することができます。

これは興味深いと思ったので、Googleで検索しました。この投稿に関する良い情報のようです:

http://www.autohotkey.com/forum/topic1572.html

于 2008-10-17T20:10:25.760 に答える
1

インストーラーアプリで

' Test eventual mark, settings in the registry.
if GetSetting("MyInstallerApp","Startup","BeenHere",0) = 1 then
    MsgBox "This installer was ran once already... first run the un-installer."
    End ' or some other code to properly exit the installer
EndIf
Call SaveSetting ("MyInstallerApp","Startup", "BeenHere", 1) 'leave a mark for future

アンインストーラーアプリ (またはインストーラーの「アンインストール」オプション)

' Allow future Installer to run again
Call DeleteSetting("MyInstallerApp", "Startup")
于 2008-11-09T12:48:29.983 に答える
0

おそらく、マシン上で実行中のプロセスをチェックして、別のインスタンスが存在するかどうかを確認することが役立つでしょうか?詳細については、このスレッドを参照してください...

于 2008-10-28T15:18:38.380 に答える
0

インストールされているアプリケーション ファイルが既に存在するかどうかを確認できます。つまり、アプリケーションがどこにインストールされたかがわかります。

于 2008-11-18T11:22:06.153 に答える
0

何度も実行してはいけないアプリケーションを放置するのは、誰かの机のどこかに大きな赤いボタンを置いたままにしておくようなもので、それを押すと机が爆破するようなものだと私は思います。クールではありません。

ほとんどのインストーラーには、繰り返しインストールを提供しない機能があります。最初にそれを確認してください - それが最良の、最も明白な解決策のようです。

ひどくめちゃくちゃになっているのは何ですか?アプリケーションの観点からすると、インストーラーを 2 回目に実行することは、最初に実行することとどう違うのでしょうか? これは、コードでも対処する必要があります。

于 2008-11-12T21:20:57.077 に答える
0

Visual Studio 2005 または 2008 で VB.NET を使用している場合は、プロジェクト設定の [アプリケーション] タブの [Windows アプリケーション フレームワーク] セクションで [単一インスタンス アプリケーションの作成] オプションをチェックできます。

于 2008-10-20T17:11:22.733 に答える