C#-Windows 7-在中创建文件
基本上,我有一个安装在用户计算机上的应用程序 用户在Windows7上。 用户没有管理员权限。 但是,应用程序需要能够将文件保存到自己的程序文件目录中 我想走的道路是:C#-Windows 7-在中创建文件,c#,windows-7,file-access,C#,Windows 7,File Access,基本上,我有一个安装在用户计算机上的应用程序 用户在Windows7上。 用户没有管理员权限。 但是,应用程序需要能够将文件保存到自己的程序文件目录中 我想走的道路是: 下载各种二进制文件(web服务) 将二进制文件写入临时文件夹中的文件 启动一个控制台应用程序。(控制台应用程序等待主应用程序关闭) 控制台应用程序将临时文件复制到程序文件目录 控制台应用程序重新启动主应用程序 控制台应用程序关闭 问题是,我知道Windows 7不允许以管理员身份运行的应用程序写入Program Files目录,
更新:是的,这是一个自动更新应用程序。我考虑过ClickOnce之类的,但是还有一些额外的要求,导致我创建自己的内部更新,主要是因为更新需要保持沉默并逐件更新。有时(取决于更新的部分)应用程序需要关闭、移入文件、重新启动。其他时候,应用程序只需移入文件并继续运行
ClickOnce在我的情况下不起作用,我们的组织正在寻找内部的东西,以便可以自定义它以满足我们未来的需要。一个解决方案是在安装过程中更改已安装文件夹的权限
echo y|cacls/E/T/p用户:要了解UAC的工作原理,请首先尝试使用术语“流程”而不是“应用程序”,并阅读以下内容:
- 流程的权限是在流程开始之前确定的
- 从其他进程派生的每个进程都会继承其安全性或:
- 询问海拔高度
最方便用户的方法是在第一次启动或安装时修改文件夹权限。这是一种不会每次都打扰用户的方法。但某些UAC肯定会在某个时候弹出给用户。正如评论已经指出的那样:如果您使用的是较新版本的Windows(Vista+),则无法访问程序文件、启用UAC(默认)和非管理员用户 您更新的问题表示您需要更新(至少部分)应用程序,可能需要重新启动。您创建了自己的模块更新方法 我的建议如下:不要写程序文件 要么将应用程序完全安装到用户配置文件中,要么将其拆分 我会尝试创建一个可执行文件,它的功能非常有限:
- 设置以使程序集不被锁定
- 在可写位置(ProgramData或用户配置文件)查找程序集并加载它
- 从那里运行应用程序
在更新的情况下,您可以覆盖程序集(因为它们被隐藏并存储在合理的位置)如有必要,请停止程序/要求用户重新启动/实施重新启动机制。您不需要管理权限。为什么不能从用户/程序数据文件夹或其他允许程序写入的位置加载文件?二进制文件中有什么?数据?或代码(“插件”)?他正在尝试为他的应用程序进行自动更新,并在更新后重新启动它,或者看起来是这样的……如果您想要自动更新,那么这可能会有所帮助:您必须拥有管理权限才能执行此操作。这意味着您必须请求用户提升负责的流程。这不是什么新内容,当然,这只是更好这是UAC的强迫。如果只是说“我不会做任何坏事”,那么这些安全措施有什么意义呢?
3. Launch a console app. (Console App waits for the main app to shutdown)