【问题标题】:C# application not running on startupC# 应用程序在启动时未运行
【发布时间】:2015-05-01 20:07:03
【问题描述】:

我这辈子都想不通。我创建了一个相当大的 C# 应用程序,它基本上运行一堆单独的组件并定期重启机器。这个应用程序的想法基本上是自动化我们公司的流程。所以我之前让它工作,以便在机器重新启动后,它会在一个帐户登录后启动。

无论如何,该应用程序将不再在启动时启动。请参阅下面的代码,我已经实现了向注册表中的 Run 键添加条目:

RegistryKey winStartUpKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
                string shieldStartVal = (string)winStartUpKey.GetValue("SHIELDCustomizer");
                if (shieldStartVal == null)
                {
                    string currentName = System.AppDomain.CurrentDomain.FriendlyName;
                    string currentDIR = Directory.GetCurrentDirectory() + @"\" + currentName;
                    RegistryKey startUpKey = Registry.LocalMachine.OpenSubKey
                        (@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", RegistryKeyPermissionCheck.ReadWriteSubTree);
                    startUpKey.SetValue("SHIELDCustomizer", "\"" + currentDIR + "\"", RegistryValueKind.String);
                }

上面的代码过去一直有效。而且我已经验证了启动条目实际上已添加到注册表中。当我将注册表中的路径复制到运行提示符中并单击“确定”时,应用程序启动时没有问题。

我对代码做了一些小改动(相当冗长的代码,不知道从哪里开始发布此代码),我无法想象这会对应用程序是否在启动时启动产生影响。我所有的图像和文件都已作为资源添加到项目中。我真正能找到的唯一参考概述了这种类似的场景是在这个论坛上:application won't start on startup after adding a notifyicon 实际上看起来与我当前的设置不相关,因为我的 notifyIcon 对象和属性是使用 Visual Studio 添加的,而我没有手动编码。

当正确的条目在注册表中时,有没有人知道什么可能导致程序在启动时无法启动?我知道我没有提供太多代码,如果我可以提供任何其他信息,请告诉我,我很乐意这样做。

非常感谢您!

【问题讨论】:

  • 您是否做过需要管理权限的事情?更新您的防病毒软件可能会对应用程序进行沙盒处理?
  • 或者您是否需要使用在您的应用程序尝试使用它时没有启动的服务?
  • 你的 AV 屏蔽了吗?....
  • 它是什么样的 C# 应用程序? Winforms / 控制台 / WPF ?
  • 如何检查它是否运行?会不会是它运行了,但立即终止了?

标签: c# windows startup


【解决方案1】:

可以使用 Windows 8.1 中的任务管理器或 Windows 7 中的 msconfig 禁用启动任务。例如,我已禁用 Box Sync 在我的机器上启动时运行:

通过任务管理器在

处设置注册表项来启用/禁用

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run

如果值以02 00 00 开头,则启用它。如果它以另一个值开头(例如我的示例中的 03 00),则它被禁用:

【讨论】:

  • 感谢您的建议 John,我已验证该应用在 WINdows 7 和 Windows 8 的注册表和任务管理器/msconfig 中均已启用,但仍然没有成功。我认为这里的问题在于应用程序中的某些内容。我只是无法想象它是什么。
  • 似乎不同版本的 Windows 对禁用程序有不同的标志。例如,在我的 Win8.1 上,启用的程序全为零,禁用的程序为“01 00 00 ...”。
  • @VictorMezrin 也许第一位指定条目是否被禁用,其他位包含一些其他数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2015-08-13
  • 2011-07-02
相关资源
最近更新 更多