安装c# windows应用程序在windows启动
本文关键字:windows 启动 应用程序 安装 | 更新日期: 2023-09-27 18:03:22
我正在编写一个windows应用程序,希望创建不同的对话框(是/否类型)等。但是我想每次windows启动时都运行这个应用程序。但是一旦安装了这个应用程序,当用户下次登录windows时,就会在后台自动启动进程。我在C:'目录和应用程序中发现的(ScreenDialog.exe)需要管理员权限才能使用C目录。但是我正在使用的代码不工作。
RegistryKey key = Registry.CurrentUser.OpenSubKey("SOFTWARE''Microsoft''Windows''CurrentVersion''Run", true);
key.SetValue("ScreenDialog", "C:''ScreenDialog.exe");
我使用自己的类,首先检查如下:
- Windows版
- 作为管理程序运行
基于以上选项你可以在注册表*中找到所需的文件夹,如果它没有存储在注册表中或发生错误,那么你必须在windows启动文件夹中创建一个快捷方式程序。
My class Codes:
using System;
using System.IO;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Security.Principal;
using Microsoft.Win32;
public static class ComponentController
{
/// <summary>
/// Is application running as administrator?
/// </summary>
public static Boolean IsAdmin()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
if (identity != null)
return (new WindowsPrincipal(identity)).IsInRole(WindowsBuiltInRole.Administrator);
return false;
}
public static Boolean IsWindowsVistaOrHigher()
{
OperatingSystem os = Environment.OSVersion;
return ((os.Platform == PlatformID.Win32NT) && (os.Version.Major >= 6));
}
/// <summary>
/// Add executable file of this app to registry startup path:
/// 'LocalMachine'SOFTWARE'Microsoft'Windows'CurrentVersion'Run'
/// </summary>
/// <param name="targetEveryone">Run as administrator</param>
public static void AddToStartup(Boolean targetEveryone)
{
try
{
using (RegistryKey main = (targetEveryone & IsAdmin() ? 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 (Exception ex)
{
// report exception ...
//
// Copy Shortcut To CommonStartUp or StartUp
//
try
{
Environment.SpecialFolder folder = ((targetEveryone && IsWindowsVistaOrHigher()) ? Environment.SpecialFolder.CommonStartup : Environment.SpecialFolder.Startup);
String fileDestination = Path.Combine(Environment.GetFolderPath(folder), Path.GetFileNameWithoutExtension(Application.ExecutablePath)) + ".lnk";
if (!File.Exists(fileDestination))
Shortcut.Create(fileDestination, Application.ExecutablePath, null, null, "description...", null, null);
}
catch (Exception exp)
{
// report exception ...
}
}
}
public class Shortcut
{
private static Type m_type = Type.GetTypeFromProgID("WScript.Shell");
private static object m_shell = Activator.CreateInstance(m_type);
[ComImport, TypeLibType((short)0x1040), Guid("F935DC23-1CF0-11D0-ADB9-00C04FD58A0B")]
private interface IWshShortcut
{
[DispId(0)]
string FullName { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0)] get; }
[DispId(0x3e8)]
string Arguments { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3e8)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3e8)] set; }
[DispId(0x3e9)]
string Description { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3e9)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3e9)] set; }
[DispId(0x3ea)]
string Hotkey { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ea)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ea)] set; }
[DispId(0x3eb)]
string IconLocation { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3eb)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3eb)] set; }
[DispId(0x3ec)]
string RelativePath { [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ec)] set; }
[DispId(0x3ed)]
string TargetPath { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ed)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ed)] set; }
[DispId(0x3ee)]
int WindowStyle { [DispId(0x3ee)] get; [param: In] [DispId(0x3ee)] set; }
[DispId(0x3ef)]
string WorkingDirectory { [return: MarshalAs(UnmanagedType.BStr)] [DispId(0x3ef)] get; [param: In, MarshalAs(UnmanagedType.BStr)] [DispId(0x3ef)] set; }
[TypeLibFunc((short)0x40), DispId(0x7d0)]
void Load([In, MarshalAs(UnmanagedType.BStr)] string PathLink);
[DispId(0x7d1)]
void Save();
}
public static void Create(string fileName, string targetPath, string arguments, string workingDirectory, string description, string hotkey, string iconPath)
{
IWshShortcut shortcut = (IWshShortcut)m_type.InvokeMember("CreateShortcut", System.Reflection.BindingFlags.InvokeMethod, null, m_shell, new object[] { fileName });
shortcut.Description = description;
shortcut.TargetPath = targetPath;
shortcut.WorkingDirectory = string.IsNullOrEmpty(workingDirectory) ? targetPath : workingDirectory;
shortcut.Arguments = arguments;
if (!string.IsNullOrEmpty(hotkey)) shortcut.Hotkey = hotkey;
if (!string.IsNullOrEmpty(iconPath)) shortcut.IconLocation = iconPath;
else shortcut.IconLocation = System.Reflection.Assembly.LoadFile(targetPath).Location.Replace('''', '/');
shortcut.Save();
}
}
}