我的问题:
我制作了一个程序,我现在在这个目录下有这个程序:"C:\Program Files (x86)\AppName"
,现在在程序中我将一些图像保存在我的程序目录中,但由于这是在{{1} }驱动器,它给了我一个C
错误,现在我让程序总是在管理模式下运行,并且工作正常,但在我的程序中还有一个功能,可以在系统启动时自动启动我的程序使用注册表项,但当“始终以管理模式运行”为ON时,即使注册表中有启动项,程序也会不启动,当“总是以管理模式运行”为OFF时,它将启动。
到目前为止我尝试了什么:
我尝试制作另一个可执行文件,该文件将在系统启动时启动,然后它将运行我的主程序并自行关闭它,我知道它会工作但现在每次启动我的计算机时,用户访问控制提示问我是否相信这个程序,这不是非常用户友好。
所以我搜索了一下,我发现我可以创建预定的任务,但我没有找到很多例子,但我尝试手动创建一个,它确实按照需要工作!
但是这里的代码不起作用:
access denied
Imports Microsoft.Win32.TaskScheduler
代码的问题是:
找不到 Using ts As New TaskService("\\RemoteServer")
'Create a new task definition and assign properties
Dim td As TaskDefinition = ts.NewTask()
td.RegistrationInfo.Description = "Does something"
'Create a trigger that will fire the task at this time every other day
td.Triggers.Add(New DailyTrigger() With {
Key.DaysInterval = 2
})
'Create an action that will launch Notepad whenever the trigger fires
td.Actions.Add(New ExecAction("notepad.exe", "c:\test.log", Nothing))
'Register the task in the root folder
ts.RootFolder.RegisterTaskDefinition("Test", td)
End Using
并且它没有使用TaskService
库!
希望有人可以帮助我以前的经验!
答案 0 :(得分:1)
回答你的问题:
要使用该代码,您必须先下载Managed Task Scheduler Wrapper。然后,要使用管理权限运行,您必须在RunLevel
上将TaskRunLevel.Highest
设置为TaskDefinition
:
td.Principal.RunLevel = TaskRunLevel.Highest
然而 ,例如Plutonix says,您不应该将文件写入程序目录(因为它通常位于受限制的%ProgramFiles%
中文件夹)。
相反,请使用%ProgramData%
directory。您可以通过Environment.GetFolderPath()
:
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
'Example:
Dim ConfigPath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "AppName")
Dim ImagePath As String = Path.Combine(ConfigPath, "MyImage.png")
If Directory.Exists(ConfigPath) = False Then Directory.CreateDirectory(ConfigPath)