2014-10-05 122 views

回答

2

找到了答案:

var Q = require('Q'); 

var getUserDoc = function(callback) { 

    var Winreg = require('winreg'); 
    var deferred = Q.defer(); 

    var regKey = new Winreg({ 
     hive: Winreg.HKCU, 
     key: '\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders' 
    }); 

    var myDocFolder = regKey.values(function(err, items) { 
     for (var i in items) { 
      if (items[i].name === 'Personal') { 
       deferred.resolve(items[i].value); 
      } 
     } 
    }); 
    deferred.promise.nodeify(callback); 
    return deferred.promise; 


} 

getUserDoc().then(function(result) { 
    console.log(result); 
}); 
+1

这不是查找信息的好方法。更好地调用官方API而不是黑客注册表 – 2014-10-05 21:01:17

+0

我也不喜欢它,但是还有其他可能性吗? – 2014-10-05 22:09:56

+0

不知道你可以从node.js做什么。只是Win32提供API来获取这些位置。 – 2014-10-05 22:14:27

-1

您应该使用环境变量改为:

function getUserDoc() { 
    return process.env.USERPROFILE+'\\Documents'; 
} 

这假设你运行Win7或更高版本。对于Win XP,它会是\\My Documents。您可以轻松地检查您的功能中的一个或另一个。

此外,您还可以使用它提供的快捷主目录()

在这种情况下,包装path-extra你必须做的事:

var path = require('path-extra'); 

function getUserDoc() { 
    return path.homedir()+'\\Documents'; 
} 

这两个解决方案让你给不给您的应用程序用于检查注册表的凭据。 运行方式比您找到的承诺+注册表骇客更快。

更新path-extra不再支持homedir。 https://github.com/jprichardson/node-path-extra/commit/ce7a0b67ce07ca06ca2eeabf62621e1327b1d113 虽然为了别出心裁,但我已经保存了该片段以供可能使用;-)

+0

如果用户在Windows中更改了MyDcouments文件夹的路径,Patah path.homedir()和process.env.USERPROFILE不指向正确的目录... 因此,两个变体都不幸工作... – 2014-10-05 22:09:34

+0

请注意, Windows XP翻译文档文件夹。所以在法国,这将是'\\ Mes Documents'。 Vista和更新的作品(不知道如何:别名?不同的显示名称?) – thomasb 2016-11-08 15:50:20

+0

Downvoted,因为您可以独立移动每个文件夹。例如:我的同事已将他的下载文件夹移至“D:\ Downloads”,因此不起作用。 – thomasb 2016-11-09 13:30:13

相关问题