我正在编写一个小的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);
答案 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更差的启动路径。