C# 如何从“开始”菜单运行我的应用程序?

C# 如何从“开始”菜单运行我的应用程序?,c#,winforms,registry,startup,regedit,C#,Winforms,Registry,Startup,Regedit,如果在“开始”菜单的编辑框中键入“regedit”并混合Enter键,将调用注册表编辑器。“cmd”和命令行也是如此,毫无疑问,还有其他几个应用程序也是如此 如何让我的应用程序以相同的方式响应,以便如果用户在“开始”菜单编辑框中输入“Platypus”,将调用Platypus.exe 它是否需要对注册表进行操作/在某处添加条目,如果需要,需要添加什么键和值 我会满足于用户需要手动运行一次应用程序(点击图标2下;这是一个Winforms应用程序),此时启动代码(没有双关语)将执行任何必要的操作,以

如果在“开始”菜单的编辑框中键入“regedit”并混合Enter键,将调用注册表编辑器。“cmd”和命令行也是如此,毫无疑问,还有其他几个应用程序也是如此

如何让我的应用程序以相同的方式响应,以便如果用户在“开始”菜单编辑框中输入“Platypus”,将调用Platypus.exe

它是否需要对注册表进行操作/在某处添加条目,如果需要,需要添加什么键和值

我会满足于用户需要手动运行一次应用程序(点击图标2下;这是一个Winforms应用程序),此时启动代码(没有双关语)将执行任何必要的操作,以使应用程序从此启动可启动(Windows键“Platypus”,启动应用程序)

我知道,当用户想要运行应用程序时,只需在桌面图标上单击两下就可以了,但这一特定功能不是我的想法,因此对这个问题的奇怪之处的抱怨将是徒劳的

更新 我添加了Chandan推荐的代码(使用可执行文件的名称):

…从主窗体的加载事件调用它:

private void FormRoboReporter_Load(object sender, EventArgs e)
{
    RoboReporterConstsAndUtils.AddToStartup();
}
…关闭应用程序,进入“开始”菜单并输入程序名(“RoboReporter”),它所做的只是显示相关文件名的搜索结果

更新2 它的作用是使我的应用程序在计算机重新启动时运行。那不是我想要的。上面的代码向HKEY_CURRENT_USER.Software.Microsoft.Windows.CurrentVersion.Run添加了一个条目,如下所示(以及在此之前的几个其他条目):


我不希望应用程序在每次计算机重新启动时启动,因此我删除了该条目。问题仍然是:如何从“开始”菜单使应用程序可运行?

您可以将应用程序的父目录路径添加到名为
path
的环境变量中

string pathvar = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("PATH", pathvar + ";" + Application.StartupPath + "\\", EnvironmentVariableTarget.Machine);
(请注意,添加到此变量的路径应以反斜杠
\
结尾,并且每个路径用分号
分隔)

将父目录的路径添加到环境变量中,可以从“开始”菜单的搜索字段、从
Run
和从
CMD
快速访问它的所有内容

您还可以将
Environment VariableTarget.Machine
更改为
Environment VariableTarget.User
以仅为当前用户修改变量


编辑:


注意:从应用程序中设置整个计算机的变量(通过使用
环境变量target.machine
)似乎需要提升权限。

您可以将应用程序的父目录路径添加到名为
path
的环境变量中

string pathvar = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("PATH", pathvar + ";" + Application.StartupPath + "\\", EnvironmentVariableTarget.Machine);
(请注意,添加到此变量的路径应以反斜杠
\
结尾,并且每个路径用分号
分隔)

将父目录的路径添加到环境变量中,可以从“开始”菜单的搜索字段、从
Run
和从
CMD
快速访问它的所有内容

您还可以将
Environment VariableTarget.Machine
更改为
Environment VariableTarget.User
以仅为当前用户修改变量


编辑:


注意:从应用程序中设置整个计算机的变量(通过使用
环境variabletarget.machine
)似乎需要提升权限。

您可能需要运行此操作

public static void AddToStartup()
{
    using (RegistryKey startup = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
    {
        startup.SetValue("Name_of_your_Program", "\"" + Application.ExecutablePath + "\"");
    }
}

你可能想运行这个

public static void AddToStartup()
{
    using (RegistryKey startup = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
    {
        startup.SetValue("Name_of_your_Program", "\"" + Application.ExecutablePath + "\"");
    }
}

HKLM\Softoware\Microsoft\Windows\CurrentVersion\App path
如果它安装到程序文件中,或者在某些MRU列表中,它是否必须以编程方式添加到“程序文件”(无疑会“弄乱”注册表)中,则搜索菜单可以在没有该条目的情况下找到它,或者简单地把它复制到一个文件夹中就行了吗?我为自己编写的所有应用程序都从未安装过,有些没有“开始”菜单项,但它可以在没有“应用路径”项的情况下找到它们。我不确定所有的魔力(因此没有正确的答案),但我认为它可以找到安装在
程序文件
文件夹中的文件,或者有开始菜单项的文件,或者您以前搜索过/运行过的文件。我的搜索发现很多没有Foo.EXE和UninstallFoo.EXE条目的东西。它可能还会搜索Click once Apps。我认为位置无关紧要,只是它已在注册表中注册。您可以在上阅读它。您可以使用
regedit
检查HKLM\Software\Microsoft\Windows\CurrentVersion\App path`中的现有条目,查看应该包含哪些内容以及应该包含哪些密钥。那里没有可复制的文件夹;它是管理用户需要编辑的注册表项。正确的方法是通过你的安装程序,这需要管理员来运行;HKLM需要管理员权限才能修改,这将阻止在应用程序第一次运行时进行修改。
HKLM\Softoware\Microsoft\Windows\CurrentVersion\App path
如果将其安装到程序文件中,或在某些MRU列表中,则搜索菜单可以在不使用该条目的情况下找到它。是否必须以编程方式将其添加到“程序文件”中(这无疑会“弄乱”注册表),或者只是简单地将其复制到一个文件夹中就可以了?我为自己编写的所有应用程序都从未安装过,有些应用程序没有“开始”菜单项,但它可以在没有“应用路径”项的情况下找到它们。我不确定所有的神奇之处(因此没有正确的答案)但我认为它会找到安装在
程序文件
文件夹中的文件,或者有“开始”菜单项的文件,或者您以前搜索过/运行过的文件。我的搜索会找到很多没有条目的文件,比如Foo.EXE和UninstallFoo.EXE。它可能还会搜索Click once Apps。我认为位置无关紧要,只是它在t中注册了他是注册处的。你可以在上面读。你可以