c# - 如何将当前运行的程序集复制到 Windows 启动项

标签 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);

最佳答案

您需要“所有用户的启动”文件夹

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 XP 的启动路径与 Windows Vista/7/8 不同。

关于c# - 如何将当前运行的程序集复制到 Windows 启动项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21764987/

相关文章:

c# - aspnet core 仅在发布时构建缓慢

c# - 如何以编程方式更改文件位置?

c# - 使用 C#.NET 4.0 LINQ 从数组中删除重复项?

c# - 在 ReflectionOnly 模式下将程序集加载到新的 AppDomain 时,方法没有实现

c# - 使用 Visual Studio 2010 时 32 位和 64 位操作系统之间的性能差异?

c++ - 深度复制 c++ - 如果给出指向该类的指针,则复制该类

ruby-on-rails - 破解 i18n 系统来生成 <p> 标签是个坏主意吗?

python - 复制内置类

c# - 如何将此程序集加载到我的 AppDomain 中?

.net - 如何在新的AppDomain中将程序集仅作为反射加载?