我创建了一个名为(WindowStartup.EXE)的示例应用程序,它显示计算机名称,操作系统版本和登录用户。此应用程序还包括启动计算机时的自动运行行为。请参阅以下代码。代码写在C#
上private void InfoWindow_Load(object sender, EventArgs e)
{
lblMachineName.Text = Environment.MachineName.ToString();
lblOSVersion.Text = Environment.OSVersion.ToString();
lblUserlogged.Text = Environment.UserName.ToString();
this.Top = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height;
this.Left = Screen.PrimaryScreen.WorkingArea.Right - this.Width;
if (StartUp()) StartUpSystem();
}
private bool StartUp()
{
bool retVal = false;
if (File.Exists(Application.StartupPath + "\\SystemFile.txt"))
{
//read text file if content is true
Stream file = new FileStream(Application.StartupPath + "\\SystemFile.txt", FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamReader(file);
string content = reader.ReadToEnd();
if (content == "true") retVal = true;
}
return retVal;
}
private void StartUpSystem()
{
RegistryKey regApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (IsStartupItem())
{
//--> Add the value in the registry so that the application runs at startup
regApp.SetValue("WindowStartup.EXE", Application.ExecutablePath.ToString());
}
}
private bool IsStartupItem()
{
// The path to the key where Windows looks for startup applications
RegistryKey regApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (regApp.GetValue("WindowStartup.EXE") == null)
// The value doesn't exist, the application is not set to run at startup
return false;
else
// The value exists, the application is set to run at startup
return true;
}
创建安装程序并将其安装到我的计算机后,它运行时没有错误。但卸载此示例应用程序后,每次启动计算机时它仍会弹出。
我会尝试使用以下代码从注册表中删除该值,但似乎它无法正常工作
private void StartUpSystem()
{
RegistryKey regApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (!IsStartupItem())
{
//--> Remove the value from the registry so that the application doesn't start
regApp.DeleteValue("WindowStartup.EXE", false);
}
}
任何人都可以帮助我如何以编程方式删除它?
答案 0 :(得分:1)
那不是:
if(IsStartupItem()) //rather than !IsStartupItem() ?
答案 1 :(得分:1)
private void DeleteRegistryKey()
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run", true))
{
if (null != key && IsStartupItem())
{
key.DeleteValue("MyApp");
}
}
}
private bool IsStartupItem()
{
// The path to the key where Windows looks for startup applications
RegistryKey regApp = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
if (regApp.GetValue("MyApp") == null)
// The value doesn't exist, the application is not set to run at startup
return false;
else
// The value exists, the application is set to run at startup
return true;
}
private static void SetRegistry(string path)
{
if (!IsStartupItem())
{
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "MyApp", path);
}
}