问题标签 [registry]

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 回答
252 浏览

registry - 我的卸载过程如何正确处理还原注册表项?

有时需要在应用程序安装期间修改 Windows 注册表设置。我最近对卸载时不恢复这些设置的应用程序感到沮丧。当我对此进行更多思考时,我突然想到可能没有一种好的(或有效的)方法来保存和恢复注册表设置。以以下事件序列为例:

  1. 应用程序 A 拥有文件扩展名的打开操作.abc
  2. 应用程序 B 已安装,并劫持文件扩展名的 Open 操作.abc
  3. 应用程序 A 已卸载。
  4. 应用程序 B 已卸载。

在第 3 步,如果应用程序 A 足够聪明,它将检测到它不再拥有 Open 操作,因此将跳过任何恢复它的尝试。

在第 4 步,应用程序 B 是否可以采取任何有效的操作?

  • 什么都不做会使 Open 操作指向已删除的可执行文件。
  • 恢复指向应用程序 A 的指针同样是一个已删除的可执行文件。
  • 不允许询问用户,因为这通常被认为超出了典型用户的技术技能。如果您不同意,请在步骤 1 和 2 中替换您认为超出用户回答范围的不同注册表更改。
  • 删除该动作同样需要用户稍后做出不知情的决定,或者使某些功能对用户不可用。

这只是我可以设想的许多糟糕情况之一,其中没有明显的唯一“正确”解决方案。我的下一个项目将需要在安装期间更改注册表,我想知道卸载的最佳或推荐做法。不幸的是,我被当前商业软件包中不良的卸载实践所困扰,所以我知道这里没有关于最佳实践的共识,要么做很多工作才能做到这一点,要么就是注册表中的设计缺陷, 或两者。

这对我来说是一个非常现实的编程问题。我将其标记为主观,因为我不确定是否有任何一刀切的正确答案。请随意不同意。

0 投票
9 回答
245641 浏览

windows - 通过注册表检测已安装的程序

我需要开发一个过程来检测用户计算机是否安装了某些程序,如果是,是什么版本。我相信我需要一个包含注册表位置和密钥的列表来查找并将其提供给程序,这不是问题。有没有更好的方法来实现这一点?

我的第一个想法是在卸载条目中检查注册表,但似乎我希望检测的应用程序之一没有。所有使用应用程序进入的注册表的标准位置是什么?

0 投票
1 回答
3261 浏览

windows - 您如何在 Windows 中注册最近使用列表以准备 Windows 7?

随着即将发布的 Windows 7,新推出的功能之一是跳转列表,它们会自动填充最近使用的项目。据推测,如果您一直在“正确”地使用 Windows 注册表记录这些最近使用的项目,它们会自动出现。

那么,他们实际上需要在注册表中的哪个位置进行注册?有没有标准的地方?

我已经做了一些更多的研究,但我仍然找不到任何关于这个的东西。似乎是一个漂亮的功能,如果它真的可用的话......

更新:下面发布的代码项目有一些有趣的地方;查看代码,它计划将条目写入

在注册表中。但是,这实际上并没有使用 windows 进行注册。路径恰好存储在注册表中,而不是存储在 MRU 列表的任何特定位置。

更新 2:看起来可能有一些关于如何在 Windows 7中使用akaDruid 帖子中提供的链接的好信息。在演讲中,他们讨论了通过 COM 接口配置跳转列表。我现在要看一下视频,看看它是否也适用于 Windows 7 之前的应用程序。(当然,如果有人知道更好,我很想听听......)

更新 3:找到了!!!

下面的视频将我引向一个命令 - SHAddToRecentDocs。跳转列表会自动填充您的应用添加到该列表的文档。该视频还介绍了其他一些内容,但 AddToRecentDocuments 是关键。因此,只要您调用了该函数,您的“最近使用”列表就可以以任何您想要的方式存储/填充。

更新 4:进一步观看视频,看起来只要您的应用程序已将自己注册为文件类型的正确处理程序,shell 就会通过为您调用 SHAddToRecentDocs 来为您填充自动跳转列表。太棒了……我的微软做了一件优雅相对简单的事情!:)

更新 5:

最近在 Windows 7 for Developers 博客上发现了一篇详细介绍该过程的文章。

http://blogs.msdn.com/yochay/archive/2009/01/06/windows-7-taskbar-part-1-the-basics.aspx

0 投票
1 回答
8328 浏览

visual-studio-2008 - 打开每个新的 VS 实例时创建的 Visual Studio 2008\Backup Files 文件夹

我想我在 VS 2008 保存备份文件的路径上有些问题。几天以来,它在我的 .sln 文件所在的同一文件夹中创建了一个新的“Visual Studio 2008”目录。然后,在第一次自动保存的时间到期后,备份文件将保存到此文件夹中。

我浏览了工具选项对话框,但我还没有找到通过静态设置目录的方法:C:\documents and settings\\My Documents\Visual Studio 2008\Backup Files。

任何人都可以为我指出这个问题的正确解决方案(可能是正确的注册表项 - 我猜)?谢谢

0 投票
3 回答
971 浏览

c# - 如何将具有整数值的 (byte[] lpData) 传递给 RegSetValueExW P/Invoke

我有这个 P/Invoke RegSetValueExW 将值设置为注册表项。在 C# 中

我的第 4 个参数 byte[] lpdata 有问题。我需要传递一个值为 5 (int) 的 DWORD。如果我传递一个字符串 (REG_SZ),一切正常,只需要使用 GetBytes 函数进行转换。

如果我调用 GetBytes("5") 它将其转换为 53 的 ascii 值,因此它将 53 写入注册表值而不是 5

0 投票
3 回答
431 浏览

dll - 为什么自注册不好?

假设自注册用于安装组件作为较大安装程序的一部分,为什么自注册不好?例如自注册 vb 自定义控件或 capicom 或其他。我承认,对于您自己编写的 dll,自行注册可能并不安全,但我不是在讨论这些。

MSDN 列出了自注册不好的几个原因,在此转载:

  • 回滚将无法正常工作。
    好吧,这个理由说得通。

  • 广告也不会起作用。
    忽略广告仅对某些类型的软件客户端很重要这一事实,我不明白为什么这是一个问题。只需要宣传主应用程序,而不是其组件。

  • 自注册不正确支持每用户密钥。
    所以呢?让每个用户都可以访问“通用”组件并不是一件坏事,除非你的机器上有很多用户,在这种情况下它仍然不是世界末日。

  • 自注册更容易受到编码错误的影响。
    我绝对可以相信这一点,除非是 Microsoft 编写的 dll(它们可能有错误,但我不认为信任它们是不合理的)。对于由软件生成的 tlbs 和 ocxs,编码错误似乎不太可能发生。

  • 自注册 dll 可能会链接到其他 dll。
    对于程序生成的 dll,自我注册似乎不太可能因此而失败,但手动添加注册密钥会起作用。我宁愿让我的自我注册返回一个我缺少 dll 的错误。

    我相信这会引起火焰:/

    编辑:划掉我认为真正重要的论点(基于用户的反应和我自己的)。

  • 0 投票
    18 回答
    254055 浏览

    batch-file - 如何从批处理脚本中获取注册表项的值?

    我需要使用 REG QUERY 命令来查看键的值并使用以下命令将结果设置为变量:

    但如果密钥不存在,我会在控制台中显示错误。我需要隐藏这个错误!我尝试在命令后放置一个 2>nul 来停止 stderr,但如果我只调用命令,这将有效:

    如果我像这样将它放入 FOR 命令中:

    显示错误。那么有人知道如何隐藏错误吗?或者也许另一个命令也可以查看密钥是否存在?

    谢谢

    PS:我用的是Windows XP

    0 投票
    4 回答
    480 浏览

    c# - C# 将组合框的内容写入注册表的最佳方法是什么?

    我有一个组合框,在单击按钮时在运行时填充(从数据库中读取大约 6 个项目),我想将这些组合框项目写入注册表,以便在程序加载时将它们读回,因此组合框是已经填充而无需从数据库中重新读取它们。

    我的问题是将这些写入注册表的最佳方法是什么,以及如何将 selectedItem 写入注册表,以便在程序加载时它是 selectedItem?

    非常感谢

    0 投票
    2 回答
    252 浏览

    c# - 不同语言的注册表值

    我有一个需要 .Net 的应用程序。我发现了如何检查注册表值以查看是否安装了 .Net 以及它是否是正确的版本。

    我想知道的是:注册表值会根据操作系统的语言设置而改变。也就是说,如果秘鲁有人安装 .Net 并且我的应用程序调用类似

    会识别“版本”吗?还是需要西班牙语形式的“版本”。

    0 投票
    1 回答
    7477 浏览

    windows - 如何使用 WshShell.RegRead 读取名称为文件路径的注册表值

    我正在编写一些由 Windows 脚本主机执行的 javascript,并且我需要能够从注册表中读取某些特定 DLL 的共享文件计数。注册表项和值如下所示:

    我正在尝试使用WshShell.RegRead方法来执行此操作,但它似乎不起作用。我认为问题在于这个方法只接受一个参数,它是要检索的值的连接键路径和值名称。由于本例中的值名称本身就是路径,因此该方法认为它是键的一部分。有没有办法让这个方法识别它的值名称?

    这是演示问题的代码:

    我看到的错误是: