如何将当前运行的程序集复制到Windows Startup

时间:2014-02-13 20:39:26

标签: c# copy .net-assembly

我正在编写一个小的TaskExplorer,它将所有正在运行的进程保存到.ini文件中。 它在当前用户的桌面上创建一个名为“Überwachung”的文件夹,并以日期作为名称保存文件。

我希望在用户登录后启动此程序,但在将当前运行的程序集复制到Windows启动时,我一直收到system.unauthorizedaccessexception

这是我的复制代码:

if (!File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "ProzessManager")))
            File.Copy(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Startup), "ProzessManager"),false);
        File.SetAttributes(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), FileAttributes.Normal);

2 个答案:

答案 0 :(得分:3)

您需要使用管理员用户授权您的应用程序。 首先在项目中添加一个新的Application Manifest File,然后更改以下行

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

答案 1 :(得分:3)

您需要所有用户的文件夹StartUp

using System.IO;
using System.Reflection;

private string pathStartUp = Environment.GetFolderPath(Environment.SpecialFolder.CommonStartup);

var exe = Assembly.GetExecutingAssembly().Location;
var destiny = Path.Combine(pathStartUp, Path.GetFileName(exe));
var data = File.ReadAllBytes(exe);
File.WriteAllBytes(destiny, data);

只需读取和写入主应用程序的所有字节就更简单了。

编辑:将变量pathStartUp更改为使用GetFolderPath,因此它甚至可以在Windows XP上运行,它具有比Windows Vista / 7/8更差的启动路径。