Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何允许我的应用程序在Windows启动(或更好的用户登录)上运行而不被vista/7阻止_C#_Wpf_Windows_Startup - Fatal编程技术网

C# 如何允许我的应用程序在Windows启动(或更好的用户登录)上运行而不被vista/7阻止

C# 如何允许我的应用程序在Windows启动(或更好的用户登录)上运行而不被vista/7阻止,c#,wpf,windows,startup,C#,Wpf,Windows,Startup,我需要我的应用程序在windows启动时运行。我总是在WindowsXP上使用注册表来实现这一点,但是这样我就被vista/7阻止了 我怎样才能避免这种情况?我只能考虑在startup文件夹中写一个快捷方式,但我不知道怎么写,也不确定它是否有效 是否有任何指导原则,我可以遵循,让我的申请工作没有任何问题与UAC?特别是在这种情况下与windows启动相关 谢谢你的回答 注意:这是一个WPF应用程序我不知道你说的Vista/Windows7是什么意思,但我在WPF应用程序中使用了以下代码,它在XP

我需要我的应用程序在windows启动时运行。我总是在WindowsXP上使用注册表来实现这一点,但是这样我就被vista/7阻止了

我怎样才能避免这种情况?我只能考虑在startup文件夹中写一个快捷方式,但我不知道怎么写,也不确定它是否有效

是否有任何指导原则,我可以遵循,让我的申请工作没有任何问题与UAC?特别是在这种情况下与windows启动相关

谢谢你的回答


注意:这是一个WPF应用程序

我不知道你说的
Vista/Windows7
是什么意思,但我在
WPF
应用程序中使用了以下代码,它在
XP/Vista/Win7
上工作

 void InstallMeOnStartUp()
 {
      try
      {
          Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
          Assembly curAssembly = Assembly.GetExecutingAssembly();
          key.SetValue(curAssembly.GetName().Name, curAssembly.Location);
      }
      catch{ 
      }
 }

如果这不是您要搜索的内容,请告诉我。

您可以在启动文件夹中放置快捷方式

在C#中,可以使用

Environment.SpecialFolder.CommonStartup (all users)
Environment.SpecialFolder.Startup       (current user)
对于C#以外的人来说,这是一篇不错的文章:


您可以创建一个在用户登录时运行的计划任务,启动应用程序

如果在应用程序中执行此操作不是强制性的,则可以在Windows启动时配置运行

以下是如何编辑
setup.iss
文件

[Tasks]
...
Name: startup; Description: "Automatically start on login"; GroupDescription: "{cm:AdditionalIcons}"

[Icons]
....
Name: "{userstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: startup

可以找到文档

问题在于应用程序将程序识别为我的程序,并且不会阻止它(它是在这台机器上编译的)。当你在windows Vista上时(发生在那里),如果你做了一些操作,你的应用程序在启动时会被阻止,我不知道是哪些操作,但我想注册表可能是其中之一。你说“启动”是什么意思?启动
Windows
或启动应用程序?您必须为该特定应用程序/端口创建Windows防火墙例外会好的。@Tigran:它写在标题“windows启动时运行”(而不是“windows启动”)上。为什么我要在防火墙上创建一个异常?我没有使用任何网络代码(我也不知道如何通过代码创建异常!)@Fire Dragon DoL:所以真正的问题可能是,在启动时,你的程序会做一些需要管理员预先许可的事情。如果,因此,您可以添加一个
manifest
,并在其中为
UAC
声明您的程序需要这些特权。请看这里,了解更多详细信息:没有(完全)回答这个问题,但这是一篇有趣的文章,谢谢。好主意,如何使用c#?您必须使用p/invoke来导入任务调度器API的签名,我认为它们在.Net framework中不直接可用。不过API非常简单。