インストールが複数回実行されると、ひどく混乱する傾向がある Visual Basic アプリを持っています。ときどき、クライアントが後でインストーラーへのショートカットを間違えて、インストーラーを再度実行すると、すべてが台無しになることがあります。私は一生理由を理解できないので、最も簡単な方法は、exeをマシンで1回だけ実行できるようにすることであると判断しました。そうしないと、終了します。何か案は?
11 に答える
回避するためにハックを試みるのではなく、インストーラーや発生している問題を修正しないでください...
0.02 ドル
インストーラーにアプリケーション フォルダーにファイルを配置してもらいます。
再度実行すると、そのファイルが存在するかどうかを確認し、存在する場合は、「既にインストールされています」ポップアップを表示して終了します。
これが 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
.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;
}
}
インストーラーにレジストリ エントリを作成させます。レジストリ エントリが既に存在する場合は、(再度) インストールを拒否します。
これを実現する正確な方法は、使用しているインストーラ テクノロジによって異なります。
実行中にインストーラー EXE ファイル自体を削除することはできますが、実行中に直接ではなく、別のサービスに呼び出しを渡して実行後に削除することができます。
これは興味深いと思ったので、Googleで検索しました。この投稿に関する良い情報のようです:
インストーラーアプリで
' 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")
おそらく、マシン上で実行中のプロセスをチェックして、別のインスタンスが存在するかどうかを確認することが役立つでしょうか?詳細については、このスレッドを参照してください...
インストールされているアプリケーション ファイルが既に存在するかどうかを確認できます。つまり、アプリケーションがどこにインストールされたかがわかります。
何度も実行してはいけないアプリケーションを放置するのは、誰かの机のどこかに大きな赤いボタンを置いたままにしておくようなもので、それを押すと机が爆破するようなものだと私は思います。クールではありません。
ほとんどのインストーラーには、繰り返しインストールを提供しない機能があります。最初にそれを確認してください - それが最良の、最も明白な解決策のようです。
ひどくめちゃくちゃになっているのは何ですか?アプリケーションの観点からすると、インストーラーを 2 回目に実行することは、最初に実行することとどう違うのでしょうか? これは、コードでも対処する必要があります。
Visual Studio 2005 または 2008 で VB.NET を使用している場合は、プロジェクト設定の [アプリケーション] タブの [Windows アプリケーション フレームワーク] セクションで [単一インスタンス アプリケーションの作成] オプションをチェックできます。