我们有一个内部开发的VB.Net Windows窗体应用程序,可以处理我们其他软件应用程序的所有自动更新。每当我在Windows 10中运行应用程序时,应用程序都在任务管理器的“后台进程”部分下启动。我可以让它在前台运行的唯一方法是以管理员身份运行它,即使我是VM上的管理员,我的UAC设置也完全关闭。这不会发生在Windows 7或8中,所以我想知道是否有什么我做错了或者有关Windows 10的内容已经改变了它必须作为管理员运行的地方。我们的其他应用程序似乎没有这个问题,它只是出于某种原因而特别是这个应用程序,但我似乎无法弄清楚有什么不同。
答案 0 :(得分:0)
这是因为在Visual Studio中配置项目的方式。 以下是如何创建一个行为类似于后台进程的应用程序:
Enable application framework
选项Startup object
更改为Sub Main
最后,将一个Module添加到项目中并添加以下代码:
Module Module1
Sub Main()
Application.Run()
End Sub
End Module
如果您运行应用程序(不是在IDE中,而是直接运行),它的行为就像您描述的那样。
只要不显示Form
,应用程序将作为后台进程保留。只要显示一个,您将看到任务管理器将进程从后台进程列表移动到应用程序列表。
要对此进行测试,只需更改此版本的模块中的代码:
Imports System.Threading
Module Module1
Sub Main()
Dim tmp As New Thread(Sub()
Thread.Sleep(3000)
Using f As New Form1()
f.ShowDialog()
End Using
End Sub)
tmp.Start()
Application.Run()
End Sub
End Module
应用程序将作为后台进程启动,3秒后将显示表单,成为前台进程。
答案 1 :(得分:0)
所以我进行了更多的错误处理,听起来像@xfx是正确的想法。应用程序在启动时犯了错误,因为它无法注册WCF服务的URL,因此它永远不会到达显示表单的位置。一旦我手动注册了WCF服务的URL并以管理员身份运行该应用程序,它就会正常显示和工作。