我想知道:是否有系统调用,库,内核模块或命令行工具,我可以用来存储磁盘上正在运行的程序的完整状态?
那就是:我想将进程当前正在使用的内存,页面布局,堆栈,寄存器,线程和文件描述符完全转储到硬盘驱动器上的文件中,并能够在以后无缝地恢复它,就像模拟器"savestate" "或虚拟机"快照".
如果可能的话,我还想拥有程序状态的多个"备份副本",因此如果程序由于某种原因而死,我可以恢复到先前的执行点.
这可能吗?
我将尽我所能详细解释我正在努力实现的目标.
我正在使用带有IntPtr窗口句柄的C#来从我自己的C#应用程序对外部应用程序执行CTRL-C复制操作.我不得不这样做,因为无法使用GET_TEXT直接访问文本.然后我在我的应用程序中使用该副本的文本内容.这里的问题是我现在已经覆盖了剪贴板.
我希望能做的是:
这是我到目前为止尝试的代码:
private void GetClipboardText()
{
text = "";
IDataObject backupClipboad = Clipboard.GetDataObject();
KeyboardInput input = new KeyboardInput(this);
input.Copy(dialogHandle); // Performs a CTRL-C (copy) operation
IDataObject clipboard = Clipboard.GetDataObject();
if (clipboard.GetDataPresent(DataFormats.Text))
{
// Retrieves the text from the clipboard
text = clipboard.GetData(DataFormats.Text) as string;
}
if (backupClipboad != null)
{
Clipboard.SetDataObject(backupClipboad, true); // throws exception
}
}
Run Code Online (Sandbox Code Playgroud)
我使用System.Windows.Clipboard而不是System.Windows.Forms.Clipboard.原因是当我执行CTRL-C时,System.Windows.Forms中的Clipboard类没有返回任何数据,但系统剪贴板却没有.
我查看了一些低级user32调用,如OpenClipboard,EmptyClipboard和CloseClipboard,希望它们可以帮助我这样做,但到目前为止,我一直在尝试恢复时遇到COM异常.
我想也许这与OpenClipboard参数有关,该参数期望一个想要控制剪贴板的应用程序的IntPtr窗口句柄.由于我提到我的应用程序没有GUI,这是一个挑战.我不知道该在这里传递什么.也许有人可以对此有所了解?
我是否错误地使用了Clipboard类?有没有明确的方法来获取没有GUI的应用程序的IntPtr窗口句柄?有谁知道备份和恢复系统剪贴板的更好方法?
警告:背景信息很长.如果您认为在背景信息之前需要问题,请跳到底部.欣赏这将要采取的时间!
我一直在网上(阅读谷歌),我没有找到一个好的答案.是的,在erlang.org网站上有很多关于Mnesia文档的链接和参考,但即使这些链接也受到版本的影响.
因此,在最简单的情况下,您当前连接的节点()与表集的所有者相同,那么备份/恢复将起作用.例如:
$ erl -sname mydatabase
> mnesia:start().
> mnesia:create_schema(...).
> mnesia:create_table(...).
> mnesia:backup("/tmp/backup.bup").
> mnesia:restore("/tmp/backup.bup", [{default_op, recreate_tables}]).
Run Code Online (Sandbox Code Playgroud)
嘿,这很棒!
但是,如果数据库实际上是在远程接口上的远程节点()或远程节点()上运行,那么您必须以这种方式启动备份:
$ erl -sname mydbadmin
> rpc:call(mydatabase@host, mnesia, backup, ["/tmp/backup.bup"]).
> rpc:call(mydatabase@host, mnesia, restore, ["/tmp/backup.bup", [{default_op, recreate_tables}]]).
Run Code Online (Sandbox Code Playgroud)
当然这也很简单.现在这里是棘手的事情....
但事情变得复杂了.虽然我的熟人是erlang和mnesia专家,他们认为mnesia的复制存在严重缺陷,你不应该使用它(目前我还没有其他替代方案,你有什么机会实现更好的版本;不是可能)
所以你有两个节点()复制ram和基于光盘的表.您一直在使用默认的BackupMod维护使用标准备份定期备份数据库的策略.有一天,经理会要求您验证备份.只有当您尝试还原数据库时,才会获得:
{atomic,[]}
Run Code Online (Sandbox Code Playgroud)
根据文档,这意味着没有错误......但是没有表格被恢复.
不想跑你记住,节点()和主机名必须匹配,以便您更改主机名和-sname参数去那里数据被备份的计算机匹配change_node程序.但是这次你得到一个奇怪的错误:
{aborted,{'EXIT',{aborted,{bad_commit,{missing_lock,mydatabase@otherhost}}}}}
Run Code Online (Sandbox Code Playgroud)
仍然不想运行change_node过程我快速克隆恢复我的服务器,以便我有两个类似的机器.然后我恰当地命名以匹配生产服务器.然后我开始恢复过程.找到了!我现在在还原服务器上有真正的工作数据.
我想说这是路的尽头......但我还没有问过一个问题,而且问题的重点......所以这就是它?
问题:如果我想恢复从复制的mnesia节点集群中获取的备份,如何修改文件(类似于change_node过程),以便忽略其他节点或从备份中删除?
问题略有不同:如何在单个节点()上恢复复制多节点()mnesia数据库?
我希望在标准的Notes.app中定期备份存储在我的iPhone,iPad和Mac OS上的笔记.不幸的是,由于Apple将这些从标准的IMAP格式转移到数据库格式(并添加了一个单独的应用程序),这几乎是不可能的.
我目前有超过200个笔记并且正在增长.我想它们以标准数据库格式存储并同步到iCloud并推送到所有设备.
Notes似乎将其数据存储在此路径中:
"库/集装箱/ com.apple.Notes /数据/资料库/备注/"
如果你们中的任何人都可以可靠地阅读,甚至可能备份/恢复这个数据库,那么请评论.
苹果知识库文章HT4910处理这个问题,证明没有什么帮助.事实上,他们的方法使问题复杂化,并且对于多个备份来说非常不优雅.
Time Machine,Apple自己的内置备份解决方案也没什么帮助,因为它似乎跳过备份并且不允许恢复笔记.
如果有人能够仔细阅读并提出解决方案,我将不胜感激,iCloud用户越来越多的社区肯定会对此表示赞赏.
我尝试了redis的DUMP命令,重定向到文件(或管道),但RESTORE报告此错误:
$ redis-cli dump test > /tmp/test.dump
$ cat /tmp/test.dump | redis-cli -x restore test1 0
(error) ERR DUMP payload version or checksum are wrong
$ redis-cli dump test | redis-cli -x restore test1 0
(error) ERR DUMP payload version or checksum are wrong
Run Code Online (Sandbox Code Playgroud)
我知道MIGRATE可以在线完成此操作,但MIGRATE也会从原始服务器中删除该密钥,我不希望我的redis暴露给公共互联网.
有一些第三方选项,例如redis-rdb-tools,但毕竟,究竟如何做DUMP和RESTORE工作?
我需要为每个任务设置不同的打开选项卡和选项卡组.
导入和导出设置没有帮助我这样做,这个SO问题也没有被类似地问过,但是对于windows/tools布局 - 即不是标签/标签组.
如何保存和恢复已保存的设置?
我正在使用Play Billing Library来触发和管理购买,从而解锁了应用中的额外功能.这部分正在运作.
但是,"恢复"购买的最佳方式是什么.比如说,购买该应用程序的人购买了一部新手机.登录Play商店,下载我的应用程序,然后发现正在显示"升级"的付款屏幕.iOS有一个特定的方法,但我不知道Android的一个方法.
我的想法是查询Play商店并确认该帐户以前是否已成功购买该商品,如果是,那么我将在应用程序内调用本地升级功能.
看来有两种类似的方法.但是我应该在这种情况下使用哪一个?用户要么擦了手机还是买了新手机?
queryPurchases()?还是queryPurchaseHistoryAsync()?
我想创建一个表单,一旦提交,在每次下一次呈现同一用户的表单时,表单将填写上次用户提交的数据.听起来像django应该有捷径的东西 - 它有吗?如果不是最简单的方法呢?
我能想到的最好的方法就是cleaned_data将它作为一个cookie进行腌制并保存,以后再重新创建它.
我正在为我的应用实施应用内购买(即将发布),并为iOS6和iOS7提供支持.我的问题与iOS6和iOS7上的非续订订阅机制之间的差异有关,更具体地说,关于如何实现恢复.为了适应iOS6和iOS7,我实现了一个服务器端解决方案来启用恢复.我可以选择允许用户创建可以在不同设备上使用的用户名/密码(如果数据丢失,则使用同一设备)进行恢复.我的大部分工作基本上都在工作,但随着我的测试进展,我发现了一些奇怪的东西.
iOS7恢复过程的初始部分使用SKReceiptRefreshRequest刷新应用程序中的收据.当我从iOS7设备上删除应用程序时,重新安装(此时没有收据;使用iExplorer进行测试),并进行恢复,SKReceiptRefreshRequest恢复10次购买(我在测试期间为此特定用户创建) .其中一个是非消耗品,其中九个不续订.这让我很困惑.从Apple文档中,我预计只会在刷新的收据中看到非消费品购买.来自https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateLocally.html:
"消耗品和非更新订阅:在购买时,消费品或非续订订购的应用内购买收据会添加到收据中.它会保留在收据中,直到您的应用完成该交易.在此之后,下次更新收据时会将其从收据中删除 - 例如,当用户再次购买时,或者您的应用明确刷新收据时.
与非续订订阅有关,请访问https://developer.apple.com/in-app-purchase/In-App-Purchase-Guidelines.pdf:
使用iCloud或您自己的服务器跟踪购买情况,并允许用户将购买的订阅恢复到单个用户拥有的所有iOS设备

有人有任何见解吗?
问题:为什么SKReceiptRefreshRequest会在收据中留下非续订产品的购买?这是Apple文档中的错误还是还有其他事情发生?
14年2月23日; 更新:我最近在Apple上发布了一个错误报告.还没回来.虽然,实际上,我不希望这个"虫子"消失!
15年10月20日; 更新:似乎Apple实际上已经解决了这个"错误".现在,当我使用恢复时SKReceiptRefreshRequest(这似乎是Apple推荐的恢复方法,请参阅https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Restoring.html) ,我现在没有在收据中显示未续订的订阅购买.我只收到非消耗品(我的应用程序只有非续订订阅和非消耗品购买).在我写完这篇文章后,我会立即向Apple提交一份错误报告,他们的文档对预期的行为不明确.
到目前为止,我对此测试的测试包括我在iOS 8.4和iOS9上运行的应用程序(实际上因为我没有正确的设备运行生产版本,因此测试版为9.1 beta),因此看起来这是Apple的服务器端更改而不是严格说iOS /设备方改变.另请注意,到目前为止,我的所有测试都是在我的应用程序的开发版本中,因此在应用内购买沙箱中也是如此.我很快就会进行生产测试.
15年12月3日; 更新; 在Apple技术支持的提示下,我又进行了一些测试.这一次,在运行iOS9.2 beta 4(13C75)的iPad上.现在看来我们已经恢复"正常",不续订订阅.也就是说,当我进行恢复时,我再次看到收据中未续订的订阅.
我正在尝试将我的 Postgresql 数据库恢复到 AWS RDS。我想我快到了。我可以获得转储,并在本地重新创建数据库,但我错过了将其恢复到 AWS RDS 的最后一步。
这是我在做什么:
$ pg_dump -h my_public dns -U myusername -f dump.sql myawsdb
create database test;
$ psql -U myusername -d test -f dump.sql
到目前为止,一切都很好。
I get an error: psql:dump.sql:2705: ERROR: role "rdsadmin" does not exist,但我想我可以忽略它,因为我的数据库包含所有内容。(我检查了 \list 和 \connect 测试)。
现在我想将此转储/测试恢复到我的 AWS RDS。
按照这个https://gist.github.com/syafiqfaiz/5273cd41df6f08fdedeb96e12af70e3b 我现在应该做:
pg_restore -h <host> -U <username> -c -d <database name> <filename to be restored>
但是我的文件名是什么,我的数据库名是什么?
我试过:
pg_restore -h mydns -U myusername …