系统启动时在管理模式下自动启动我的程序而没有UAC提示

时间:2017-11-23 19:45:31

标签: vb.net uac autostart

我的问题

我制作了一个程序,我现在在这个目录下有这个程序:"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库!

希望有人可以帮助我以前的经验!

1 个答案:

答案 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)