How Should I Remove Autorun in my computer
Pergunta
I have created a sample application named (WindowStartup.EXE) that display the Computer name, OS version and user logged in. This application is also consist of auto run behavior upon starting the machine. Please see below codes. Code is written on 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;
}
After creating an installer and installing it in my machine, it runs without an error. But upon uninstalling this sample application, it still pop-up every time i start my machine.
I'll try the below code to remove the value from the registry but it seems that it's not working
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);
}
}
Can anyone help me on how can I remove it programmatically?
Solução
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);
}
}
Outras dicas
Wouldn't that be:
if(IsStartupItem()) //rather than !IsStartupItem() ?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow