我正在尝试手动修补我的应用程序。该应用程序使用了一个服务,我确保在尝试覆盖应用程序dll之前停止和卸载。
问题是我无法覆盖,甚至删除一些作为应用程序核心的dll文件,这些dll文件被我首先卸载的服务使用。
我使用以下方法传入新的文件路径,以便在C:\Program Files\AppName\
public static bool CopyFile(string newFile,string oldFile) {
var newfile = new FileInfo(newFile); var oldfile = new FileInfo(oldFile); var f2 = new FileIOPermission(FileIOPermissionAccess.AllAccess, oldFile); f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, newFile); try { f2.Demand(); } catch (SecurityException s) { Console.WriteLine(s.Message); } for (int x = 0; x < 100; x++) { try { File.Delete(oldfile.FullName); newfile.CopyTo(oldfile.FullName, true); return true; } catch { Thread.Sleep(200); } } return false; }
我只想提供一个新文件并删除旧文件,替换它,覆盖它....应用程序
注意:我运行的应用程序以管理员身份运行修补程序。
有什么想法吗?
答案 0 :(得分:0)
我能够通过使用“中间人”来解决这个问题,换句话说,另一个应用程序下载另一个可执行文件并将命令行参数传递给它。
最初,我的服务会下载一个可执行文件(称之为Installer.exe
)。然后,Installer.exe
将尝试停止服务并修补内容,但这不起作用。
我现在正在运行该服务,它会下载“Installer.exe
”。
Installer.exe
将加载并下载PatchPayload.exe
。
PatchPayload.exe
运行并终止服务,卸载它,然后从中央服务器下载所有必需的补丁内容,并单独修补服务核心文件,然后安装服务并再次运行。