复制文件并将其添加到启动

时间:2014-03-08 00:02:54

标签: c# copy startup

我正在创建一个应用程序,我将文件复制到用户的appdata,然后添加一个注册表项,以便文件在启动时运行。 我在运行时遇到URI异常。 这是给我带来麻烦的代码片段。

RegistryKey rk = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\My_Application");
if (rk != null)
{
    //Do nothing as the program is already added to startup
}
else
{
    string newpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\My_Application\\" + "My_Application.exe";
    File.Copy(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.ToString(), Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\My_Application\\" + "My_Application.exe");
    RegistryKey startup = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
    startup.SetValue("My_Application", "\"" + newpath);
}

2 个答案:

答案 0 :(得分:1)

问题出在startup.SetValue()。您正在逃避"个字符,我认为您想要逃避\

startup.SetValue("My_Application", "\\" + newpath);

如果你真的想要逃避",那么你可能需要双方一个:

startup.Setvalue("My_Application", "\"" + newpath + "\"");

或者通常这应该有用(我不太熟悉这个API)

startup.SetValue("My_Application", newpath);

答案 1 :(得分:1)

使用System.IO.Path.Combine进行路径连接。此外,请确保在复制之前存在目标目录。

string appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string newpath = System.IO.Path.Combine(appData, "My_Application", "My_Application.exe");
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(newpath));
File.Copy(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase.ToString(), newpath);
RegistryKey startup = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
startup.SetValue("My_Application", newpath);