标签: shadow-copy

使用PowerShell中的"备份"上下文创建卷影副本

我正在编写PowerShell脚本以使用rsync备份Windows计算机.为此,我试图使用所述脚本中的WMI创建一个具有编写器参与的非持久性Shadow副本(显然建议用于备份).

我从另一个问题(从PowerShell访问卷影复制(VSS)快照)中发现了一种通常创建卷影副本的方法,但是那里给出的示例使用"ClientAccessible"作为上下文参数,这导致创建持久性影子复制,没有作家参与.

在搜索解决方案时,我发现我可以使用以下命令获取上下文列表,我假设WMI理解这些上下文:

Get-WmiObject win32_shadowcontext | Out-GridView
Run Code Online (Sandbox Code Playgroud)

它列表有一个名为"备份"的上下文,这是我想要的方便.我继续尝试使用该上下文创建非持久性卷影副本:

$shadow = (Get-WmiObject -list win32_shadowcopy).Create("C:\", "Backup")
Run Code Online (Sandbox Code Playgroud)

但是,这似乎失败了,$ shadow变量的内容设置为

ReturnValue      : 5
ShadowID         : {00000000-0000-0000-0000-000000000000}
Run Code Online (Sandbox Code Playgroud)

根据相关文档(Win32_ShadowCopy类的Create方法),返回值表示"不支持的卷影副本上下文".

我找不到任何相关文档,说明为什么不支持此上下文或者是否可以使用它.我也尝试了"FileShareBackup"和"AppRollback"上下文没有成功.

我假设我要么缺少明显的东西,要么由于某种原因,WMI在创建卷影副本时不支持"clientAccessible"以外的任何其他内容,或者这是依赖于操作系统的(我在Windows 7上测试这个,64位)

我怎样才能让它发挥作用?

backup powershell wmi shadow-copy

38
推荐指数
1
解决办法
3953
查看次数

如何只从代码库加载我的DLL?

我的项目(某种处理引擎)分为2个dll:一个具有接口声明,一个具有功能.通常,项目由外部Delphi项目通过COM技术使用.

让我们说我的程序切片水果.外部delphi程序创建Fruit对象并填充其属性:weight(int),Name(字符串)和ProgressUpdater(类型为IProgressUpdater,在第二个dll中使用接口声明).在此exst programm creater Slicer之后,生成Slicer.AddFruit(newFruit)并调用Slicer.Slice().

没什么特别的.在现实生活中,delphi项目是Outlook插件.但问题是这样 - 有时一些VSTO插件使Outlook工作在"影子复制文件"模式,所以当delphi项目启动并创建Slicer对象时,我们的c#程序集将被放入临时文件夹,并将使用此本地路径创建程序集.嗯......这仍然不是问题.但问题是当delphi项目创建newFruit然后传递ProgressUpdater对象时,在我的Slicer程序集中我无法获得外部ProgressUpdater:"返回参数具有无效类型",但仍然可以获得具有简单类型(权重,名称)的字段.

它仅在启用shadowCopyFiles模式时发生.所以我的猜测是 - 外部ProgressUpdater的装配和切片器装配放置在不同的地方,因此它们无法通过.我的问题是如何避免我的dll被"影子复制"?还是有一些不同的解决方案?

.net c# delphi com shadow-copy

25
推荐指数
1
解决办法
848
查看次数

Windows VSS:两个卷影副本之间的区别?

我正在使用VSS api创建卷的一些卷影副本,然后使用它们的UNC路径访问它们.
是否有可能获得某种类型的列表,只是在两个连续阴影之间发生了变化?

这样做的显而易见的方法是遍历卷中的所有文件并检查更改,但必须有一个更简单的方法来执行此操作,因为VSS的一个关键功能是它可以节省信息的增量并且只保存改变了.

windows shadow-copy

24
推荐指数
1
解决办法
2385
查看次数

ASP.Net无法在PRODUCTION中创建/卷影副本

我们最近更新了一个相当大的ASP.NET网站(~1500th alexa流量排名),以使用在Windows Server 2008 R2上运行的VS2010和.NET 4.0

从那时起,当我们部署新版本的网站时,我们偶尔会注意到这篇文章中的相同错误: ASP.Net无法创建/卷影副本 错误消息是:无法创建/卷影复制'xxxx,版本= 4.0.4301.26898,Culture =当该文件已存在时,中性,PublicKeyToken = null'

但是,与该帖子不同,错误仅在我们的生产环境中发生,并且仅在某些服务器上发生.

在我们发布新版本的代码之后,我们回收所有AppPools并且错误开始发生.

另一个AppPool回收似乎解决了这个问题,但我真的想知道如何才能首先避免这个问题?

asp.net dll shadow-copy asp.net-4.0 windows-server-2008-r2

15
推荐指数
1
解决办法
4330
查看次数

MEF和ShadowCopying DLL,以便我可以在运行时覆盖它们

我试图阻止我的应用程序锁定我的MEF插件目录中的DLL,以便我可以在运行时覆盖程序集(注意我实际上并没有尝试让MEF在运行时重新加载它们,在下一个应用程序启动很好,我只是不想要停止应用程序来复制)

我试图通过为我的mef加载的程序集创建一个阴影复制的应用程序域来执行此操作,如下所示:

[Serializable]
    public class Composer:IComposer
    {
        private readonly string _pluginPath;
        public Composer(IConfigurePluginDirectory pluginDirectoryConfig)
        {
            _pluginPath = pluginDirectoryConfig.Path;
            var setup = new AppDomainSetup();
            setup.ShadowCopyFiles = "true"; // really??? is bool not good enough for you?
            var appDomain = AppDomain.CreateDomain(AppDomain.CurrentDomain.FriendlyName + "_PluginDomain", AppDomain.CurrentDomain.Evidence, setup);

            appDomain.DoCallBack(new CrossAppDomainDelegate(DoWorkInShadowCopiedDomain));      
        }

        private void DoWorkInShadowCopiedDomain()
        {
            // This work will happen in the shadow copied AppDomain.

            var catalog = new AggregateCatalog();
            var dc = new DirectoryCatalog(_pluginPath);
            catalog.Catalogs.Add(dc);
            Container = new CompositionContainer(catalog);
        }

        public CompositionContainer Container { …
Run Code Online (Sandbox Code Playgroud)

c# mef shadow-copy appdomain

12
推荐指数
1
解决办法
4365
查看次数

使用NUnit进行单元测试时获得所需/正确的装配路径

我刚刚开始尝试使用moq对我的模块进行单元测试.

实际上,我必须编写单元测试的类使用

Assembly.GetExecutingAssembly().Location 在内部确定路径.

但是,这在编写单元测试时不起作用,因为执行程序集的路径不同(采用单元测试程序集的路径)

AppData\\Local\\Temp\\3ylnx32t.ukg\\TestApplication.Test\\assembly\\dl3\\aeb938e6\\f3664631_d982ce01.

我试过,禁用阴影复制.

AppDomainSetup appDomain= new AppDomainSetup{ShadowCopyFiles = "false",};
appDomain.ShadowCopyFiles=false.ToString();
Run Code Online (Sandbox Code Playgroud)

不过,它不起作用!

任何建议表示赞赏.提前致谢.

c# nunit unit-testing shadow-copy .net-4.5

12
推荐指数
4
解决办法
8029
查看次数

使用Asp.Net Core进行自我更新/卷影复制

我正在编写一个Asp.Net Core应用程序,该应用程序应该能够自行更新(在运行时替换自己的二进制文件).

这篇MSDN文章用经典的.Net框架描述了阴影复制,这正是我所需要的.但.Net Core中缺少整个AppDomain的东西.

所以我的问题是:

  • 在.Net Core中是否有另一种方法可以启用阴影复制程序集?
  • .Net Core中是否有其他机制可以构建自我更新的应用程序?

shadow-copy auto-update appdomain .net-core asp.net-core

12
推荐指数
2
解决办法
1346
查看次数

实现自我更新软件的最佳方法

我们有一个最小的'updater'exe,用于检查远程URL以获取更新,下载它们并在启动实际应用程序之前替换磁盘上的文件.但是,如果我们想要更换更新程序EXE,那么AFAIK我们有两个选择:

1)卷影复制程序集,其中.Net将创建EXE(和任何引用的程序集)的卷影副本并加载这些程序集,以便可以替换非卷影程序集,并在下次启动应用程序时使用.

2)确定要替换的文件,并在磁盘上重命名/移动它们.Windows似乎允许重命名/移动锁定的文件,因此我们可以移动文件并复制新的程序集.再次,在下一次启动应用程序时,我们将启动新的程序集.这里提到这种方法

这第二种方法是推荐的方法吗?这种方法有什么缺陷吗?

.net shadow-copy

11
推荐指数
3
解决办法
5262
查看次数

为默认AppDomain设置卷影复制的正确方法是什么

有关我可以使默认AppDomain使用某些程序集的卷影副本吗?,它描述了一个工作解决方案,用于在特定目录的默认AppDomain中激活卷影复制.

基本上它说使用这些简单的方法:

AppDomain.CurrentDomain.SetShadowCopyPath(aDirectory);
AppDomain.CurrentDomain.SetShadowCopyFiles();
Run Code Online (Sandbox Code Playgroud)

但是因为这里使用的方法被标记为过时,我想知道现在正是什么方法来实现同样的目标.警告消息提示:

请调查AppDomainSetup.ShadowCopyDirectories的使用

AppDomain有一个这种类型的成员SetupInformation,可以带你进入这个简单的实现

AppDomain.CurrentDomain.SetupInformation.ShadowCopyDirectories = aDirectory;
AppDomain.CurrentDomain.SetupInformation.ShadowCopyFiles = "true";
Run Code Online (Sandbox Code Playgroud)

不幸的是,这没有效果.所以问题是,有没有办法改变当前appdomain的AppDomainSetup以激活阴影复制?

.net shadow-copy appdomain appdomainsetup

9
推荐指数
1
解决办法
9081
查看次数

appdomain中的ShadowCopyFiles属性有什么作用?

我知道当你设置为true时,它会将文件复制阴影.但是阴影复制是什么意思以及为什么我们需要阴影复制文件?

.net shadow-copy

8
推荐指数
1
解决办法
2507
查看次数