2012-02-17 11 views
0

私はターゲットマシンにいくつかの.exeとDLLをインストールし、レジストリにキーを設定して、Excelファイルを右クリックして新しいコンテキストメニューを表示する小さなインストーラを持っています項目。このコマンドは、キーのような値の何かを持っている:レジストリキーの.exeにファイル名を渡す

[TARGETDIR] myexecutable.exe%1

効果が引数[0]に私の実行可能ファイルにファイル名を渡すために1があり% 。私はこれが私の.exeに完全なパスを与えると期待しています。しかし、私にはある種の圧縮されたパスが与えられます。

C:のために例えば\ DocumentsとSettings \ユーザー\デスクトップ\のteestqqqq.xls

それは私に与える:

Cを:\ DOCUME〜1 \ユーザー\デスクトップ\ TEEST 〜1.XLS

これは問題です。どうすればこの問題を解決できますか?私は適切なフルパスが必要です。

更新:私が受け取ったパスからいくつかの新しいフォルダ名が派生しているので、コメントと回答で要求されているように、これは私の問題です。これらのフォルダ名はコミットされるので、後でSVNリポジトリが一部のユーザーによってコミットされます。私は、私のユーザーのいくつかのマシンでは、.exeがソートパスを受け取り、他は長いパスを受け取っていることに気付きました。私のユーザは、SVN上でDIFFの目的のためにフォルダ名が "ユニーク"であると考えています。私はちょうどあなたが試みることができる

+0

これはあなたが得るショートパスです。なぜそれは問題ですか? – rene

+0

更新された質問 – Jerome

答えて

1

(私は私が書いている時点で、以下の回答に必要なものを既に存在だと思う)フォルダ名の一意性を保証する方法が必要です:

string shortName = @"C:\DOCUME~1\user\Desktop\TEEST~1.XLS"; 
string longName = System.IO.Path.GetFullPath(shortName); 
1

長い長い」の前にファイル名 "。 MS DOSのファイル名は、名前には8文字、拡張子にはドットと最大3文字の制限がありました。あなたが見ているのは、長いファイル名を持つ短いバージョンのパスです。これ以上の説明があります:http://www.computerhope.com/issues/ch000209.htm

ここで、指定したパスがどのように問題であるかを説明します。 Windows APIは短いファイル名のバージョンでも動作できるはずです。

ken2kが述べたように、System.IO.Path.GetFullPath(..)は、短いファイル名のパスを指定して拡張パスを返します。

ドキュメント引用:あなたは短いファイル名に渡すと、それは長いファイル名に展開されて

を。

+0

質問に更新 – Jerome

2

それを行う必要があります

Path.GetFullPath(path) 

を試してみてください。しかし、あなたは短い道で働くことができます。

3

%1"%1"と置き換えます。つまり、引用符を付けると、長いファイル名になります。物事は 'Documents and Settings'に名前にスペースがあり、引用符を使わずにプログラムに正しく渡すことはできません。そのため、シェルは、パスをスペースなしで短い名前に変換してから、プログラムに渡します。

関連する問題