强制启动时启动应用程序

时间:2013-01-11 14:28:29

标签: c#

我正为孩子们创造一个像环境一样的亭子。 我的应用程序扫描并杀死很多游戏进程,因为他们不能玩M或以上评级的游戏,因为他们很年轻,禁用任务管理器,因为他们没有必要或使用它。 但我需要一种方法,我可以运行这个应用程序一次,它复制/添加自动启动自动。 谢谢:))

哦,不,我不想让我的应用程序成为Windows服务。

可以编辑注册表或轻松添加到启动文件夹的内容。

4 个答案:

答案 0 :(得分:4)

这实际上很容易做到。 以下是两个可用于执行此操作的代码段。 这会将您的程序复制到一个很少访问的文件夹中,然后使用计算机的注册表在计算机的启动时打开它。

注意:我们使用try和catch语句以防万一,你应该总是使用它们。

public static void AddToRegistry()
{
       try
       {
           System.IO.File.Copy(Application.ExecutablePath, Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\ATI\" + "msceInter.exe");
           RegistryKey RegStartUp = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
           RegStartUp.SetValue("msceInter", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\ATI\" + "msceInter.exe");
       }
       catch { }
}

这是添加到启动(我们将文件复制到启动文件夹,开始按钮>所有程序>启动是它将被找到的位置)

 public static void AddToStartup()
 {
       try
       {
           System.IO.File.Copy(Application.ExecutablePath, Environment.GetFolderPath(Environment.SpecialFolder.Startup) + @"\" + "msceInter.exe");
       } 
       catch { }
 }

答案 1 :(得分:4)

如果您不想将应用程序作为Windows服务运行,那么您可以考虑在HKey_Current_User\Software\Microsoft\Windows\CurrentVersion\Run注册该应用程序 这将确保应用程序将在启动时执行。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run注册应用程序将确保应用程序在启动时为所有用户执行。

RegistryKey registryKey = Registry.CurrentUser.OpenSubKey
            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
registryKey.SetValue("ApplicationName", Application.ExecutablePath);

答案 2 :(得分:2)

以下是我通常用于自动将应用程序添加到启动环境的代码。它还包括一小段代码,可以绕过UAC保护。

using Microsoft.Win32;
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Windows.Forms;

public static class Program
{
    [STAThread]
    public static void Main()
    {
        if (!IsAdmin() && IsWindowsVistaOrHigher())
            RestartElevated();
        else
            AddToStartup(true);
    }

    private static Boolean IsAdmin()
    {
        WindowsIdentity identity = WindowsIdentity.GetCurrent();

        if (identity != null)
            return (new WindowsPrincipal(identity)).IsInRole(WindowsBuiltInRole.Administrator);

        return false;
    }

    private static Boolean IsWindowsVistaOrHigher()
    {
        OperatingSystem os = Environment.OSVersion;
        return ((os.Platform == PlatformID.Win32NT) && (os.Version.Major >= 6));
    }

    private static void AddToStartup(Boolean targetEveryone)
    {
        try
        {
            Environment.SpecialFolder folder = ((targetEveryone && IsWindowsVistaOrHigher()) ? Environment.SpecialFolder.CommonStartup : Environment.SpecialFolder.Startup);
            String fileDestination = Path.Combine(Environment.GetFolderPath(folder), Path.GetFileName(Application.ExecutablePath));

            if (!File.Exists(fileDestination))
                File.Copy(Application.ExecutablePath, fileDestination);
        }
        catch { }

        try
        {
            using (RegistryKey main = (targetEveryone ? Registry.LocalMachine : Registry.CurrentUser))
            {
                using (RegistryKey key = main.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
                {
                    String fileName = Path.GetFileNameWithoutExtension(Application.ExecutablePath);

                    if (key.GetValue(fileName) == null)
                        key.SetValue(fileName, Application.ExecutablePath);
                }
            }
        }
        catch { }
    }

    private static void RestartElevated()
    {
        String[] argumentsArray = Environment.GetCommandLineArgs();
        String argumentsLine = String.Empty;

        for (Int32 i = 1; i < argumentsArray.Length; ++i)
            argumentsLine += "\"" + argumentsArray[i] + "\" ";

        ProcessStartInfo info = new ProcessStartInfo();
        info.Arguments = argumentsLine.TrimEnd();
        info.FileName = Application.ExecutablePath;
        info.UseShellExecute = true;
        info.Verb = "runas";
        info.WorkingDirectory = Environment.CurrentDirectory;

        try
        {
            Process.Start(info);
        }
        catch { return; }

        Application.Exit();
    }
}

如果您只想创建一个启动文件夹的应用程序快捷方式而不是复制整个文件,请查看thisthis,因为它不像第一个看起来那么简单一目了然。

答案 3 :(得分:0)

  using Microsoft.Win32;



    public partial class Form1 : Form
            {


            RegistryKey reg = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
            public Form1()
            {
                reg.SetValue("AutoRun", Application.ExecutablePath.ToString());
                InitializeComponent();
            }
    }

这是一些代码,可以在Windows启动时启动它。