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

Joe*_*oel 9 windows registry

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

C:\example\example.exe -someargument
Run Code Online (Sandbox Code Playgroud)

当电脑启动时.我试图使用此注册表项:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
Run Code Online (Sandbox Code Playgroud)

关键是:

Name: example
Type: REG_SZ
Data: "C:\example\example.exe -someargument"
Run Code Online (Sandbox Code Playgroud)

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

"cd C:\example\; example.exe -someargument"
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

aba*_*hev 12

您可以在下一个注册表项下注册您的应用程序(就像Reg2Run工具一样)

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

@="c:\example\example.exe"
Path="c:\AnotherPath"
Run Code Online (Sandbox Code Playgroud)

因此,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);
Run Code Online (Sandbox Code Playgroud)


Sim*_*ick 5

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

    using System.IO;
:
:
    Environment.CurrentDirectory = Path.GetDirectoryName(Application.ExecutablePath);
Run Code Online (Sandbox Code Playgroud)