【问题标题】:Auto-start my program in administrative mode when system starts up without the UAC prompt当系统在没有 UAC 提示的情况下启动时以管理模式自动启动我的程序
【发布时间】:2017-11-23 19:45:30
【问题描述】:

我的问题

我制作了一个程序,例如我现在在这个目录下有这个程序:"C:\Program Files (x86)\AppName",现在在程序中我将一些图像保存在我的程序目录中,但由于这是在C 驱动器中,它是给我一个access denied 错误,现在我让程序始终在管理模式下运行并且效果很好,但我的程序中还有一个功能可以在系统使用注册表项启动时自动启动我的程序,但是当“始终以管理模式运行”为ON时,即使注册表中有启动键,程序也不会启动,并且当 >“始终以管理模式运行”为OFF,它将启动。


到目前为止我所做的尝试

我尝试制作另一个可执行文件,该文件将在系统启动时启动,然后它将运行我的主程序并自行关闭它,我知道这会起作用,但现在每次我启动计算机时,用户访问控制提示问我是否信任这个程序,这不是很友好。

所以我搜索并发现我可以创建计划任务,但我没有找到很多示例,但我尝试手动创建一个,它确实可以按要求工作!

但这里的代码不起作用:

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,也没有使用TaskScheduler库!


希望有人有这方面的经验可以帮助我!

【问题讨论】:

  • 我认为问题出在i'm saving some images in my program directory。 Program Files 不适用于数据,需要特殊许可。其余的似乎正在试图破解这个

标签: vb.net uac autostart


【解决方案1】:

回答你的问题:

要使用该代码,您必须先下载Managed Task Scheduler Wrapper。然后,要使其以管理权限运行,您必须在您的TaskDefinition 上将RunLevel 设置为TaskRunLevel.Highest

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)

【讨论】:

  • 我认为这是有道理的,我会同意的,谢谢!
  • @MousaAlfhaily:很高兴我们能帮上忙!
猜你喜欢
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 2021-05-21
  • 2012-06-10
  • 2018-03-01
  • 2017-03-18
相关资源
最近更新 更多