标题:如何让可执行程序只运行一次?
只看楼主
jyq012
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-8-2
 问题点数:0 回复次数:9 
如何让可执行程序只运行一次?

本人想设计一个定时运行程序,在规定时间启动notepad.exe
设计部分程序如下:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

Dim strPath As String
Dim ProcID As Integer

if ...(在规定时间)
strPath = System.Windows.Forms.Application.StartupPath
ProcID = Shell(strPath & "\notepad.exe", AppWinStyle.NormalFocus, True, 1)
endif

End Sub

可是一到规定时间notepad.exe运行就没完没了,如何让其只运行一次?

搜索更多相关主题的帖子: 执行程序 notepad strPath System exe 
2006-08-02 13:58
adair
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:250
专家分:0
注 册:2005-9-3
得分:0 

你用错了.

你选择工具箱中的COMPONENTS目录下的TIMER.就OK了.

这个TIMER是系统TIMER事件.

而你所用的TIMER是WINDOWS TIMER事件.

不过话又说回来.你不需要IF语句.


********年轻无极限******** 要時刻相信你自己,不要被自己打敗
2006-08-02 18:50
jyq012
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-8-2
得分:0 
我改为选择工具箱中的COMPONENTS目录下的TIMER,还是运行9次。
if语句是我需要在一个外部文件设定的时间启动,通过读入这个时间来判断,所以就用了if语句。

[此贴子已经被作者于2006-8-2 19:29:41编辑过]


2006-08-02 19:29
jyq012
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-8-2
得分:0 

整个程序是这样的:
Private Sub Timer1_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs) Handles Timer1.Elapsed
Dim strhh, systemhour, systemminute, systemsecond As String
Dim h1 As Integer
Dim strPath As String
Dim line1, line2 As String
Dim hour1, minute1 As String
Dim hour2, minute2 As String
Dim ProcID As Integer

strhh = TimeString '系统时间:如:15:25:45
systemhour = Mid(strhh, 1, 2)
systemminute = Mid(strhh, 4, 2)
systemsecond = Mid(strhh, 7, 2)

'读入启动系统的时间
strPath = System.Windows.Forms.Application.StartupPath
Dim file1 As System.IO.StreamReader = New System.IO.StreamReader(strPath & "\BootTime.txt")

line1 = file1.ReadLine() ' "11:50"
line2 = file1.ReadLine()
file1.Close()
hour1 = Mid(line1, 2, 2)
minute1 = Mid(line1, 5, 2)
hour2 = Mid(line2, 2, 2)
minute2 = Mid(line2, 5, 2)
'判断是否到启动的时间
'TextBox1.Text = systemhour
'ProcID = 0
TextBox1.Text = ProcID


If (systemhour = hour1 And systemminute = minute1) Or (systemhour = hour2 And systemminute = minute2) Then
If systemsecond = "01" then
ProcID = Shell(strPath & "\notepad.exe", AppWinStyle.NormalFocus, True, 1)
End If
End If


End Sub


2006-08-02 19:32
Ver
Rank: 1
等 级:新手上路
帖 子:173
专家分:0
注 册:2006-2-8
得分:0 

加入如下代码:
If Ubound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) >0 then
end
end if


我用古老的咒语重温,吟唱灵魂序曲寻根 面对魔界的邪吻,不被污染的转身,维持纯白的象徵然后还原为人
2006-08-04 16:00
chenjin145
Rank: 1
等 级:禁止访问
帖 子:3922
专家分:0
注 册:2006-7-12
得分:0 
再添個static bool b=true

if(b)
{
if(判斷時間)
{
運行notepad.exe
b=false
}
}

[url=javascript:alert(1);] [div]fdgfdgfdg\" on\"[/div] [/url]
2006-08-04 17:57
adair
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:250
专家分:0
注 册:2005-9-3
得分:0 

If (systemhour = hour1 And systemminute = minute1) Or (systemhour = hour2 And systemminute = minute2) Then
If systemsecond = "01" then
ProcID = Shell(strPath & "\notepad.exe", AppWinStyle.NormalFocus, True, 1)
End If
End If
改為:

If (systemhour = hour1 And systemminute = minute1) Or (systemhour = hour2 And systemminute = minute2) Then
If systemsecond = "01" then
ProcID = Shell(strPath & "\notepad.exe", AppWinStyle.NormalFocus, True, 1)

thread.sleep(1000)

End If
End If


我想你的timer的interval應該等於100左右吧.不過我建議你還是再改進一下.這种方法(你編程的思路)不可取.


********年轻无极限******** 要時刻相信你自己,不要被自己打敗
2006-08-04 19:41
jyq012
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-8-2
得分:0 
谢谢楼上的各位,我改了timer 的interval间隔为1000确实就可以了。但请问adair:其它方法的思路能否讲一下?
还有ver的回答:我的程序是不能结束的,因为是一个定时程序,必须24小时都在运行。
chenjin145的方法我还看不懂,对vb.net还不是很熟,我慢慢研究一下看是否可行。
谢谢!!!!

2006-08-04 22:39
Ver
Rank: 1
等 级:新手上路
帖 子:173
专家分:0
注 册:2006-2-8
得分:0 
我的意思不是结束你的程序,这只是一个例子,你可以改成你需要关闭的程序

我用古老的咒语重温,吟唱灵魂序曲寻根 面对魔界的邪吻,不被污染的转身,维持纯白的象徵然后还原为人
2006-08-06 19:25
jyq012
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-8-2
得分:0 

利用ver提供的程序做了启动主窗口的判断,不错。谢谢


2006-08-06 20:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-81628-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022158 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved