使用注册表来启动程序,还可以更改当前的工作目录?

时间:2010-05-12 21:40:26

标签: windows registry

我正在尝试启动我在此目录中创建的程序:

C:\example\example.exe -someargument

计算机启动时。我试图使用此注册表项:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

密钥为:

Name: example
Type: REG_SZ
Data: "C:\example\example.exe -someargument"

但我的程序还需要目录C:\ example中的文件,但由于当前工作目录不同,因此无法找到它们。可以在注册表项值

中执行类似的操作
"cd C:\example\; example.exe -someargument"

这样它会改变目录吗?或者有更好的解决方案吗?

谢谢!

5 个答案:

答案 0 :(得分:8)

您可以在下一个注册表项下注册您的应用程序(例如Reg2Run tool

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths\example.exe

@="c:\example\example.exe"
Path="c:\AnotherPath"

因此System.Diagnostics.Run("example.exe");将使用指定的工作路径启动您的应用程序。

或者另一种方式:使用C#编写启动器。您可以使用PowerShell cmdlet执行相同操作。

var info = new System.Diagnostics.ProcessStartInfo(@"c:\example\example.exe", "-someargument")
{
    WorkingDirectory = @"c:\AnotherPath"
};
System.Diagnostics.Process.Start(info);

答案 1 :(得分:4)

在应用程序开始时,执行以下操作(这是C#,转换为C ++):

    using System.IO;
:
:
    Environment.CurrentDirectory = Path.GetDirectoryName(Application.ExecutablePath);

答案 2 :(得分:0)

如果文件总是与您的应用程序位于同一目录中,请使用Application.ExecutablePath从代码中找到文件的工作目录,然后无论如何都可以引用它们。

答案 3 :(得分:0)

如果需要从同一目录加载DLL,可以在

下创建子密钥example.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

注册表项并定义PATH REG_SZexample.exe

答案 4 :(得分:0)

您还可以在文件夹中为程序创建快捷方式,并在注册表中引用此快捷方式:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
Name: example
Type: REG_SZ
Data: "C:\example\example.lnk