使它成为exe的最好方法只能运行一次

时间:2008-10-17 19:57:53

标签: vb.net vb6

我有一个Visual Basic应用程序,如果安装运行不止一次,往往会严重搞砸。似乎偶尔客户端错误地将安装程序错误地提供给它的快捷方式,再次运行安装程序并且它会使一切都混乱。我不能为我的生活弄清楚为什么所以我决定最简单的方法就是让它只能在机器上运行一次,否则它就会结束。有什么想法吗?

11 个答案:

答案 0 :(得分:6)

为什么不修复安装程序或发生的任何问题,而不是试图做一些黑客来避免它......

只是我的$ .02

答案 1 :(得分:3)

让安装人员将文件放在应用程序文件夹中。

再次运行时,检查该文件是否存在,显示“已安装”弹出窗口并退出。

答案 2 :(得分:2)

假设这是一个VB6问题,您可以使用内置的App.PrevInstance。

文档:http://msdn.microsoft.com/en-us/library/aa268085(VS.60).aspx

如果您的应用程序已在运行,则App.Previnstance将返回True。

在启动表单的加载事件或子主程序中:

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

答案 3 :(得分:1)

您可以让安装程序EXE文件自行删除,而不是在运行时直接删除,而是在完成运行后将调用传递给其他服务以将其删除。

我觉得这很有趣所以我用Google搜索了一下,看起来像这篇文章的一些好消息:

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

答案 4 :(得分:1)

如果您使用.net,那么Mutex是您的朋友。

永远不要使用Process.GetProcessesByName方法。你以后只会讨厌使用需要Admin priviliges的东西

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;               
            }
}

答案 5 :(得分:1)

让安装程序创建一个注册表项。如果注册表项已存在,则拒绝安装(再次)。

具体如何实现这一点取决于您使用的安装程序技术。

答案 6 :(得分: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")

答案 7 :(得分:0)

如果您在Visual Studio 2005或2008中使用VB.NET,则可以在项目设置的“应用程序”选项卡的“Windows应用程序框架”部分中选中“创建单个实例应用程序”选项。

答案 8 :(得分:0)

也许检查机器上正在运行的进程,告诉你是否存在另一个实例会有帮助吗?有关详细信息,请参阅this thread

答案 9 :(得分:0)

令我感到震惊的是,留下一个应用程序不应该多次运行就像在某人桌子的某个地方留下一个大红色按钮,当被推开时会炸毁桌面。不酷。

大多数安装程序都具有不提供重复安装的功能。先检查一下 - 这似乎是最好,最明显的解决方案。

什么是严重混乱?第二次运行安装程序与从应用程序的角度运行安装程序有何不同?这也应该在你的代码中解决。

答案 10 :(得分:0)

您可以检查并查看已安装的应用程序文件是否已存在。假设是,您知道应用程序的安装位置。