问题标签 [shadow-copy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
922 浏览

asp.net - ASP.NET 4 App dll 被影子复制,但 bin dll 被加载

大型 asp.net 4 应用程序有一个非常奇怪的问题。IIS 有时不会从卷影副本位置加载模块,而是从 dll 最初来源的 bin 目录加载模块。

有谁知道 IIS 模块加载的工作原理以及这是正常行为还是错误?

这给我们带来的问题

  • 在开发中;相应的 dll 被锁定在 bin 文件夹中,这意味着 msbuild 无法在构建时替换它。
  • 这给我们带来了一个特别讨厌(而且很难找到)的问题(我们正在使用 hack 解决这个问题),我们在 nhibernate 查询中得到 TypeMismatchException

笔记

  • 在 Win7 和 WinServer2008R2、IIS 7.5 上运行的 ASP.NET 4 应用程序,使用 MVC3、MVC4、WebForms、WebApi 的多个项目
  • 通过附加 VS 调试器和检查加载的模块获取的模块信息
  • 如果我 IISRESET 并清除 temp asp.net 文件夹,然后启动应用程序,则 dll 将全部复制到卷影副本位置,然后从那里加载。如果我然后再次 IISRESET 并启动应用程序,则模块将从 bin 位置而不是卷影副本位置加载
  • 这只会影响 Web 项目的项目依赖项,入口点始终从卷影副本位置加载。IE Proj.Web将从卷影副本位置加载,该Proj.BusinessLogicProj.DataAccess的项目依赖项将从 bin 文件夹加载,外部依赖项(automapper、glimpse 等)将从卷影副本位置加载。
  • 我们不会在代码、web.config 或 IIS 配置(默认设置)中覆盖任何应用程序池或应用程序域配置。
  • 找不到详细记录模块加载或应用程序启动的任何地方。
0 投票
0 回答
645 浏览

c++ - 从临时目录中删除 Shadow Copy dll

我们的很多exe的动态加载B.dll。B.dll 在临时文件中复制自身并重新加载 %TMP%\B-.dll。我正在尝试使用此代码将 B-.dll 标记为删除,但由于“访问被拒绝”而失败,这无疑是因为 LoadLibrary 调用:

但是,根据此处(http://msdn.microsoft.com/en-us/library/windows/desktop/aa363915(v=vs.85).aspx),这应该是可能的:

“DeleteFile 函数将文件标记为在关闭时删除。因此,在文件的最后一个句柄关闭之前不会删除文件。”

关于如何在 Windows 服务器操作系统上将当前打开的文件标记为关闭时删除的任何想法?

0 投票
0 回答
1881 浏览

c# - 将卷影复制目录添加到 ASP.NET AppDomain

我已经看到了这个这个问题,但它们都有几年的历史了,就我而言,可能还有另一种解决方案:

我有一个带有基于THIS的插件系统的 ASP.NET MVC 5 应用程序。
所以我的~/bin文件夹是由框架复制的影子,我的~/Plugins文件夹正在使用“手动影子复制”到~/Plugins/ShadowCopy应用程序预初始化,如上面链接中所述。
到目前为止,这工作得很好,因为我现在有以下情况:

我创建了一个单独的限制AppDomain来执行一些沙盒代码。
为了能够将具有在我的程序集中定义的类型的对象传递到该域,我将此域设置ApplicationBase为主域的卷影副本目录(如果您不从那里加载它们,则SerializationException在将类型/对象传递给第二个时会得到一个域,因为定义此类型的程序集是从不同位置加载的)。

现在我可以将我的“基础程序集”中定义的类型传递给第二个域。
但是,一旦我想使用插件中定义的类型,它就会失败,因为插件程序集不在默认的卷影复制目录中,而是在我的“手动卷影复制目录”中。
而且由于该目录也位于完全不同的位置,因此我无法将其添加为 a PrivateBinPath,因为它们必须位于基本路径下方。

目前我使用以下“解决方法”:

在预初始化方法中。这会将“手动卷影复制目录”添加到默认卷影复制目录中,并且我的插件也被框架卷影复制,我的第二个AppDomain能够加载它们并且一切都或多或少地工作。

但是正如SetShadowCopyPath所描述的那样,我现在要解决我的实际问题:
我正在寻找一个更好的解决方案来避免被贬低的方法。
我想到了以下解决方案,但无法确定是否/如何可能:

  1. AppDomain配置 IIS以创建一个AppDomainSetup.ShadowCopyDirectories属性设置为~/bin~/Plugins/ShadowCopyviaweb.config
  2. 将卷影复制目录移动到 eg~/bin/Plugins并告诉 IIS 在此文件夹中的更改上不要回收主AppDomain目录(否则应用程序会在每次请求时重新启动,因为 pre-init 方法每次都会更改其中的文件)

另一个想法是将“手动卷影复制目录”设置在默认卷影复制目录下面,而不是类似的~/Plugins/ShadowCopy东西C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\69da84c5\cd056104\Plugins,但是“干扰框架文件夹”是否明智?

我对解决这个问题以及解决我的基本问题的不同方法持开放态度。

0 投票
2 回答
268 浏览

c# - 在控制台应用程序及其单元测试中获取应用程序目录

我在同一个项目中有一个带有 NUnit 测试的控制台应用程序项目。

我一直在尝试应用此解决方案

在运行时,该解决方案工作正常。但是当我通过 Resharper 测试运行程序或 NUnit GUI 运行程序运行测试时,GetExecutingAssembly().Location返回了这样的路径:d:\Temp\f4ctjcmr.ofr\nojeuppd.fmf\R2Nbs\assembly\dl3\9766f38e\b9496fb3_43cccf01\.
禁用卷影复制解决了两个测试运行器中的问题,但出现了新问题(在 NUnit Gui 关闭之前,VS 无法构建项目)。有没有比禁用卷影复制更好的解决方案?

更新: Environment.GetCommandLineArgs()[0]在启用了影子复制的 NUnit Gui 中运行的测试中返回C:\Program Files (x86)\NUnit 2.6.3\bin\

0 投票
0 回答
456 浏览

c# - 使用 C# 访问驱动器的卷影副本

我们必须在一个驱动器 (L) 中写入一个文件,该驱动器是 C 驱动器的卷影副本。我们尝试了正常的,如下所示。

但它给出了错误

System.IO.DirectoryNotFoundException:找不到路径的一部分'L:\DATA\ABC.DAT

如果有任何特定的访问方式,请提供帮助。

0 投票
1 回答
41 浏览

.net - 无法让 ShadowCopy 工作

我在程序集 1 中有以下代码

在位于我的 Assembly2 中,mPluginDirectory我有以下代码

当我运行应用程序时,Assembly2 被加载到应用程序域并打印“运行”,但目录mCachePath是空的,我无法在应用程序运行时修改/删除 Assembly2.dll,为什么不使用 .net 阴影当我告诉它使用它时复制功能。

0 投票
1 回答
299 浏览

nunit - 什么时候将 pdb 文件复制到卷影副本目录?

我正在对 OpenCover 和 NUnit 进行一些修改以满足我的需要。

简而言之,即使在 Nunit 中启用了卷影复制,我也想获得覆盖率信息。但是,当 pdb 文件不存在时,OpenCover 无法跟踪程序集。当在 NUnit 中启用影子复制时,被测程序集被复制到影子目录,OpenCover 无法找到相应的 pdf 文件。

起初,我认为 .Net Runtime 只是没有将 pdb 文件复制到影子目录。但是在我进一步调查这个问题之后,我发现运行时会复制 pdb 文件,但不会在复制程序集的同时。

我现在的理解是运行时将首先将程序集复制到影子目录。然后将加载这些程序集并通知 Opencover。OpenCover 发现没有 pdb 文件,因此这些程序集被忽略。一段时间后,pdb 文件被复制,但 OpenCover 未能注意到这一事实,因此未能跟踪这些程序集。

所以我的问题是.Net Runtime 将 pdb 文件复制到影子目录的确切时间是什么时候?我是否可以修改 OpenCover 以便它能够跟踪这些影子复制的程序集?

0 投票
1 回答
1441 浏览

c# - 以编程方式复制正在使用的文件

在我的 C# 代码中,我希望能够使用一些影子复制机制来复制另一个进程正在使用的文件。

我已经看到解决方案存在于网络、企业或命令行工具中。但它可以以编程方式完成以模仿简单的文件副本吗?

0 投票
0 回答
80 浏览

vb.net - AppDomain 的 Shadowcopy 不更新引用的 dll

我们有一个主应用程序(Winforms),其中引用了几个包含逻辑和 UI 层的 dll。在对如何在 winforms 应用程序中执行自动更新进行了一些研究之后,我找到了使用 AppDomain 和 ShadowCopies 功能的解决方案。另一个可执行文件查找更新并交换文件。

好的,但是现在,我遇到了以下情况:

  1. 我启动主应用程序(通过新的 AppDomain 加载)。
  2. 我打开一个在引用的 dll(“ReferenceA”)中的表单。此 dll 是从副本中复制和实例化的。(伟大的!)
  3. 此时系统接收到新版本“ReferenceA”和“ReferenceB”的更新,并进行文件交换。
  4. 我打开“ReferenceB”中的另一个表单。此 dll 是从副本中复制和实例化的,但此 dll 还引用了 ShadowCopy 未更新的“ReferenceA”,因为它已经在目录中。
  5. 现在系统正在运行新版本的“ReferenceB”和旧版本的“ReferenceA”。在我的测试中,我在“ReferenceA”中创建了一个新方法,然后我显然得到了消息:“找不到方法”。

关于如何解决这个问题的任何建议?

0 投票
1 回答
265 浏览

c++ - 是否有适用于 Windows 8 的卷影复制 SDK?

我试图安装 Windows 卷影复制 SDK,但是当我看到这个链接时它只支持 Windows 2003 和 xp http://www.microsoft.com/en-us/download/details.aspx?id=23490

我试图强制安装以查看会发生什么,我用 msvc 2010 开发它,它给我错误,每当我放

它给了我很多错误

这是否意味着 win8 不支持 vshadow SDK?还是停产了?还是我安装错了?