C# 应用程序如何在运行注册表中安装和注册,以使用非管理员用户自动运行

C# 应用程序如何在运行注册表中安装和注册,以使用非管理员用户自动运行,c#,registry,C#,Registry,我有一个应用程序,通过以下方式注册自己以运行windows注册表: RegistryKey rk1 = Registry.LocalMachine.OpenSubKey( "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); var value1 = rk1.GetValue(KeyName); if(value1 == null) rk1.SetValue(KeyName, KeyValue); Reg

我有一个应用程序,通过以下方式注册自己以运行windows注册表:

RegistryKey rk1 = Registry.LocalMachine.OpenSubKey(
       "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
var value1 = rk1.GetValue(KeyName);
if(value1 == null)
    rk1.SetValue(KeyName, KeyValue);


RegistryKey rk2 = Registry.LocalMachine.OpenSubKey(
       "Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run", true);
var value2 = rk2.GetValue(KeyName);
if(value2 == null)
    rk2.SetValue(KeyName, KeyValue);
我使用Administrator user安装应用程序,我希望在所有用户的每次登录中自动运行它,但使用此实现,应用程序不会在有限用户登录中运行,因此您的建议是什么

编辑:


对于管理员用户,所有功能都能正常工作,但对于有限的用户,应用程序从未启动。

您应该做的第一件事是向文件写入一些消息(称为日志),以了解应用程序无法工作的原因。
如果您在一开始就写入日志“应用程序已启动”,您可以了解它是否运行(因此请稍后查看消息以了解它停止的位置)。
不要使用(如在您的评论中)exe所在的目录进行日志记录,因为它无法写入有限的用户。
试试这个:

string fname = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicatio‌​nData),
    "your_app_name", "log.txt"); 
File.AppendAllText(fname, "Started");

您应该做的第一件事是向文件中写入一些消息(称为日志记录),以了解应用程序无法运行的原因。
如果您在一开始就写入日志“应用程序已启动”,您可以了解它是否运行(因此请稍后查看消息以了解它停止的位置)。
不要使用(如在您的评论中)exe所在的目录进行日志记录,因为它无法写入有限的用户。
试试这个:

string fname = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicatio‌​nData),
    "your_app_name", "log.txt"); 
File.AppendAllText(fname, "Started");

当您以管理员身份登录时,应用程序是否运行?当您以受限用户身份登录时,应用程序的启动和终止是因为它无法完成任务还是根本无法启动?@Macro我用new update回答了这个问题:您如何判断应用程序从未启动?您是否将其“开始”写入到每个人都可以访问的系统位置中的文件?哪个操作系统?@Marco不,我没有登录任何启动,我在win xpNo中尝试,您的软件所在的目录无法写入用户。试试这个:
string fname=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),“你的应用程序名”,“log.txt”);AppendAllText(fname,“start”)`当您以管理员身份登录时,应用程序是否运行?当您以受限用户身份登录时,应用程序的启动和终止是因为它无法完成任务还是根本无法启动?@Macro我用new update回答了这个问题:您如何判断应用程序从未启动?您是否将其“开始”写入到每个人都可以访问的系统位置中的文件?哪个操作系统?@Marco不,我没有登录任何启动,我在win xpNo中尝试,您的软件所在的目录无法写入用户。试试这个:
string fname=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),“你的应用程序名”,“log.txt”);AppendAllText(fname,“start”)`