【问题标题】:Starting a program with dynamic path in C#在 C# 中使用动态路径启动程序
【发布时间】:2017-08-15 21:15:06
【问题描述】:

我在我的 AppData 文件夹中创建了启动程序的软件。

然而,我想做的是让它以动态路径运行。

我当前使用的路径是:

new ProcessStartInfo(@"C:\Users\user\AppData\Local\SOFTWAREPROGRAM\File\program.exe")

但是,我希望它不仅可以在“用户”上运行,而且可以在具有 AppData 文件夹的所有用户上运行。我尝试了以下路径(在目录中浏览时有效):

new ProcessStartInfo(@"%USERPROFILE%\AppData\Local\SOFTWAREPROGRAM\File\program.exe")

但是,我收到“找不到文件”错误。

我将如何纠正这个问题?我希望它适用于不同的用户。

编辑

答案在我的程序中有效,但在我尝试开发的服务中无效。我试过了:

(答案)

new ProcessStartInfo(Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\AppData\Local\SOFTWAREPROGRAM\File\program.exe"))

string folder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string specificFile = Path.Combine(folder, @"\Local\SOFTWAREPROGRAM\File\program.exe");

ProcessStartInfo(specificFile)

这适用于程序(控制台项目),但不适用于服务。这是为什么呢?

我在运行时输出了specificFile,但它只包含\Local\SOFTWAREPROGRAM\File\program.exe

【问题讨论】:

标签: c# windows directory


【解决方案1】:

您可以使用 Environment.ExpandEnvironmentVariables 方法从环境变量中获取实际路径。

new ProcessStartInfo(Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\AppData\Local\SOFTWAREPROGRAM\File\program.exe"))

【讨论】:

  • Pavel,我已经在我的服务中编辑了代码,但你的方法似乎不适用于服务?
  • 您的服务使用什么帐户运行?通常服务在特殊系统帐户下运行,例如本地服务或网络服务。但您可以指定任何 Windows 帐户来运行它。
  • 如果我使用旧方法(C:\Users\Administrator的绝对路径,它使用SYSTEM,这就是我想要实现的目标
  • %USERPROFILE% 如果是运行应用程序的用户文件夹的路径。因此,在您的情况下,它是 SYSTEM 用户的配置文件文件夹。
  • 没有。你有以下几种选择: 1)把你要运行的应用程序放到SYSTEM用户配置文件文件夹(好像是C:\Windows\System32\Config\systemprofile),但这不是一个好主意; 2)在不同的帐户下运行您的服务 3)搜索注册表以获取特定用户的配置文件文件夹 4)使用模拟访问特定用户的文件夹。 5) 将您要运行的应用程序放入 ProgramData 文件夹中,以便所有用户都可以使用。我认为,变体 4 和 5 是最好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多