1

私は子供たちのためにキオスクのような環境を作っています。私のアプリケーションは、非常に若いためM以上の評価のゲームをプレイできないため、多くのゲームプロセスをスキャンして強制終了し、タスクマネージャーを必要としないか使用しないため、無効にします。しかし、このアプリケーションを一度実行して、それ自体をコピー/追加して自動的に起動する方法が必要です。ありがとう :)

ああ、いいえ、アプリケーションを Windows サービスにしたくありません。

レジストリを編集したり、スタートアップ フォルダに簡単に追加したりできるもの。

4

4 に答える 4

5

それは実際には非常に簡単です。これを行うために使用できる 2 つのコード スニペットを次に示します。これにより、ほとんどアクセスされないフォルダーにプログラムがコピーされ、コンピューターのレジストリを使用して、コンピューターの起動時にプログラムが開かれます。

: 念のため、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 { }
 }
于 2013-01-11T14:32:44.123 に答える
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);
于 2013-01-11T15:44:17.430 に答える
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();
    }
}

ファイル全体をコピーするのではなく、スタートアップ フォルダーへのアプリケーション ショートカットだけを作成する場合は、これこれを参照してください。これは、一見したように単純ではないためです。

于 2013-01-15T03:49:17.080 に答える
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 の起動時に起動するコードです。

于 2015-02-24T17:25:49.657 に答える