【发布时间】:2014-05-12 13:29:00
【问题描述】:
我编写了一个可执行文件,它将文件从网络位置复制到 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));
}
此可执行文件的目的是检查网络位置是否有较新的文件,如果它们较新,请将它们复制到给定位置。所以我不需要安装程序。
【问题讨论】:
-
听起来像是 UAC 问题 - 您应该创建一个 MSI 安装程序(Visual Studio 提供了一个速成版的 Installsheild)
-
如何将它作为启动程序运行?通过注册表还是将其放入自动启动文件夹?
-
@RowlandShaw:这个的具体用途是什么?有没有办法让我的 .exe 文件直接写入它?
-
@BigM:两种方法我都试过了,都没有成功。
-
简而言之,UAC 是一种安全措施,可最大程度降低恶意软件将自身复制到看起来“安全”的地方的风险。听起来您正在尝试伪造安装程序,但最好还是实际编写一个安装程序并安装一次。还有其他方法(例如更改文件夹权限),但它们会增加以后出现安全问题的风险,我不建议这样做。