我有一个引用另一个项目的项目,以便利用代码的某些部分。其中一个项目是一个控制台应用程序(即项目类型),但由一个重要的代码库组成。另一个是引用此控制台应用程序的GUI应用程序。这样做的原因是,应用程序可以作为控制台应用程序或GUI应用程序运行。控制台和GUI应用程序之间的注册表项访问差异
当GUI应用程序运行时,它绝对可以访问注册表,但是当我运行控制台版本时,它访问与GUI应用程序相同的代码,但无法安全地访问注册表项。我假设GUI和控制台应用程序都将通过相同的用户运行。
这里是什么失败(由隐藏具体细节的变化):
String user = Environment.UserDomainName + "\\" + Environment.UserName;
RegistrySecurity rs = new RegistrySecurity();
rs.AddAccessRule(new RegistryAccessRule(user, RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.WriteKey | RegistryRights.FullControl, InheritanceFlags.None, PropagationFlags.None, AccessControlType.Allow));
mapsynckey = Registry.LocalMachine.CreateSubKey("SOFTWARE\\AppPath\\AppName\\");
UserName = mapsynckey.GetValue("user").ToString();
Password = mapsynckey.GetValue("pass").ToString();
SyncFolderPath = mapsynckey.GetValue("syncfolderpath").ToString();
忽略的访问权限,我只是在尝试每一个因此随机混合物。 我收到的错误是:
访问注册表项 'HKEY_LOCAL_MACHINE \ SOFTWARE \ APPPATH \ AppName的' 被拒绝
这里的其他事情。我无法在注册表中的任何位置找到条目,甚至无法在64位部分找到条目。但是,我将注册表项的详细信息加载到显示正常的应用程序中,但如果我浏览注册表,它们不在那里。
我完全难住了,我已经花了最后3个小时的时间对此进行了处理,并且不知道发生了什么。
at ApplicationSettings..ctor() in C:\Projects\MapSync\MapSyncConsole\ApplicationSettings.cs:line 34
at ApplicationSettings.get_Instance() in C:\Projects\MapSync\MapSyncConsole\ApplicationSettings.cs:line 47
at MainApplication..ctor(Boolean forceDownload) in C:\Projects\MapSync\MapSyncConsole\MainApplication.cs:line 27
at MapSyncConsole.Program.Main(String[] args) in C:\Projects\MapSync\MapSyncConsole\Program.cs:line 21
什么是堆栈跟踪? – SLaks 2010-07-06 13:44:22
添加为您的乐趣。 – Kezzer 2010-07-06 13:47:32
也许是因为控制台和表单版本的“AppPath”和“AppName”不同? – 2010-07-06 13:52:48