我编写了一个可执行文件,可以将文件从网络位置复制到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));
}
此可执行文件的目的是检查较新文件的网络位置,如果它们较新,则将它们复制到给定位置。所以安装程序不是我需要的东西。
答案 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")]
你可以在这里找到一个完整的例子: