在启动时复制到程序文件

时间:2014-05-12 13:29:01

标签: c# windows-8

我编写了一个可执行文件,可以将文件从网络位置复制到Program Files中的文件夹。当我正常运行(作为管理员),一切都很顺利。但是,当它作为启动程序运行时,执行突然停止。

没有抛出异常(据我所知,我已经包含了在正常执行时有效的日志记录)。它似乎停止运行;我添加了一个消息框,以便在执行后显示,但这不起作用。

代码或设置中是否有任何解决方案可以让我的启动程序写入Program Files?

如果需要,我可以提供代码,但它只是一个简单的file.CopyTo()方法。确切的路径是:C:\Program Files (x86)\Microsoft Visual Studio 11.0\Team Tools\Static Analysis Tools\FxCop\Rules

附加代码:

string sourceLocation = ConfigurationManager.AppSettings["sourceLocationCodeAnalysisRules"];
DirectoryInfo sourceDir = new DirectoryInfo(sourceLocation);
sourceDir
        .GetFiles()
        .Where(file => file.LastWriteTime > new FileInfo(Path.Combine(deployDir.FullName, file.Name)).LastWriteTime)
        .ForEach(file => file.CopyTo(Path.Combine(deployDir.FullName, file.Name), true));
}

此可执行文件的目的是检查较新文件的网络位置,如果它们较新,则将它们复制到给定位置。所以安装程序不是我需要的东西。

4 个答案:

答案 0 :(得分:1)

您可能必须以管理员身份运行它。我猜您已将该计划添加到Startup的{​​{1}}中的All programs。在这种情况下,打开启动文件快捷方式的属性,并在Windows选项卡中选中“以管理员身份运行此程序”。

在任何情况下,如果这不起作用,您应该向您的应用添加日志记录以查看会发生什么。

编辑:或者您可以使用任务计划程序安排任务,使用触发器'当计算机启动时'执行。 It seems to work

编辑2:您似乎需要manifest file才能复制到程序文件。

答案 1 :(得分:1)

不要将您的应用程序放在“Startup”文件夹中,而是将其作为Admin启动(启动时出现恼人的UAC提示),然后让任务负责这样做。

你可以在这里看到如何做:

您可以确保使用Windows Installer正确设置所有内容。

答案 2 :(得分:0)

未以管理员身份运行时,无法更改Program Files文件夹的内容。

充其量,您必须强制您的应用程序以管理员身份运行,但每次程序运行时,您都会收到UAC消息。

如果这是您想要的,请根据以下答案编辑app.manifest:How do I force my .NET application to run as administrator?

答案 3 :(得分:0)

据我了解,您希望运行“代码”,用户需要特殊权限才能运行。在这种情况下,我能想到的就是你可以帮助你在代码中设置权限限制,这将抛出正确的异常,如:

[PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")]

在您的方案中,它将类似于:

[FileIOPermissionAttribute(SecurityAction.Demand, Read = "C:\\Program Files")]

你可以在这里找到一个完整的例子:

How to demand permissions by using Code Access Security