2017-03-23 6 views
0

私のAppDataフォルダにプログラムが起動するソフトウェアを作成しました。私はしかし、やりたいことC#で動的パスのプログラムを起動する

は、それが動的パスで実行させることです。

私は現在使用されているパスは次のとおりです。

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

私はそれはしかし、単に 'ユーザではなく、AppDataフォルダを持つすべてのユーザーで実行しないようにすることができるようにしたいです。私は(ディレクトリに参照するとき動作します)次のパスを試してみました。これにより

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

しかし、私は「ファイルがfound'エラーがない得ます。

どうすればこの問題を修正できますか?私はそれが別のユーザーで動作するようにします。

EDIT

答えは私のプログラムで動作しますが、私は開発しようとしているサービスでは動作しません。私が試してみました:

(答)

​​

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

ProcessStartInfo(specificFile) 

をこれがプログラム(コンソールプロジェクト)ではなく、サービスで動作します。どうしてこれなの?

I出力specificFile実行中にそれだけであなたは、環境変数から実際のパスを取得するにはEnvironment.ExpandEnvironmentVariablesメソッドを使用することができます\Local\SOFTWAREPROGRAM\File\program.exe

+2

可能な重複[私は、現在のユーザーの「アプリケーションデータ」フォルダのパスを取得できますか?](http://stackoverflow.com/questions/915210/how-can-i-get-the-現在のユーザーのアプリケーションデータパスのフォルダ) – ASh

+2

Environment.ExpandEnvironmentVariablesを通じて文字列を実行します –

+0

そのフォルダの目的は、アプリケーション自体ではなくアプリケーションデータを格納することです。 – Crowcoder

答えて

3

が含まれています。

​​ の
+0

ありがとうございました! –

+0

Pavel、私は私のサービスでコードを編集しましたが、あなたの方法はサービスでは動作していないようですね。 –

+0

あなたはどのサービスを使って実行していますか?通常、サービスは特別なシステムアカウントで実行されます。ローカルサービスまたはネットワークサービス。しかし、Windowsアカウントを指定して実行することができます。私は古い方法( 'Cとの絶対パスを使用した場合 – Pavel

関連する問題