system32.dllのC#のVisual Studio 2008のリファレンス...どうやって?
質問
私は、参照SYSTEM32 / shell32.dllのを必要としています。 [SYSTEM32に行く/直接のShell32.dll]> ---ブラウズ>の両方が私の参照にShell32は参照を追加します - 「 - > COM - >マイクロソフトシェルコントロールとAutomatation参照の追加」し、「参照の追加私が試してみました。 。私は、プロパティを見たときしかし、私はこのような参照ルックスのパスを参照してください:「C:\ Users \ユーザーティム\ドキュメント\ Visual Studioの2008 \プロジェクト\ウィング\ FileWing \ OBJ \デバッグ\ Interop.Shell32.dll」 ...
私は、インストーラにこの\ OBJ \デバッグ\パスを展開しないでしょう。だから、どのように私は、エンドユーザーが直接のShell32.dll参照することができますか?方法はありますか?なぜVS2008は、この奇妙なパスを作成しますか?それはこの奇妙なサブフォルダに座っていませんので、私はこのパスを変更することはできますか?
<時間>うーん。オーケーのPInvokeを再訪した後、私はかなりそれを取得しないことを確信している: - /
私が処理するために必要なコードを示してみましょう。私はリサイクルビンかかわら掘り、私は回復したいという項目を模索しています。 PInvokeのはこれを成し遂げるためにかかわらず、戦っていない方法はありますか?
private void recoverRecyclerBinEntry(string fileName, int size)
{
try
{
Shell Shl = new Shell();
Folder Recycler = Shl.NameSpace(10);
// scans through all the recyclers entries till the one to recover has been found
for (int i = 0; i < Recycler.Items().Count; i++)
{
FolderItem FI = Recycler.Items().Item(i);
string FileName = Recycler.GetDetailsOf(FI, 0);
if (Path.GetExtension(FileName) == "")
FileName += Path.GetExtension(FI.Path);
//Necessary for systems with hidden file extensions.
string FilePath = Recycler.GetDetailsOf(FI, 1);
string combinedPath = Path.Combine(FilePath, FileName);
if (size == FI.Size && fileName == combinedPath)
{
Debug.Write("Match found. Restoring " + combinedPath + "...");
Undelete(FI);
Debug.WriteLine("done.");
}
else
{
Debug.WriteLine("No match");
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
Debug.WriteLine(ex.StackTrace);
}
}
private bool Undelete(FolderItem Item)
{
try
{
foreach (FolderItemVerb FIVerb in Item.Verbs())
{
if (
(FIVerb.Name.ToUpper().Contains("WIEDERHERSTELLEN")) ||
(FIVerb.Name.ToUpper().Contains("ESTORE")) ||
(FIVerb.Name.ToUpper().Contains("NDELETE"))
)
{
FIVerb.DoIt();
return true;
}
}
//execute the first one:
Item.Verbs().Item(0).DoIt();
return true;
}
catch (Exception)
{
Debug.WriteLine("ERROR undeleting");
return false;
}
}
解決
私は<あなたが P /呼び出し(プラットフォーム呼び出し)を探していると信じて/ A>
あなたが含むとダウンのDLLを使用するための方法を取得したら、あなたが訪問することができます pinvoke.netするへ特定のメソッドを使用するため、特定のコードスニペットを取得します。
他のヒント
あなただけのを使用していますShell32は/カーネル32にアクセス機能にのDllImport
?その場合は、参照を追加する必要はありません。
[DllImport("KERNEL32.DLL", EntryPoint="MoveFileW", SetLastError=true,
CharSet=CharSet.Unicode, ExactSpelling=true,
CallingConvention=CallingConvention.StdCall)]
public static extern bool MoveFile(String src, String dst);
ここでプラットフォーム呼び出しそしてここにあるMSDN 記事でます。
あなたはVS 2008を使用して、DLLの参照を追加したら、.dllファイルのプロパティを開くことができます。
ローカルコピーがTrueに設定されていることを確認します。
別のソリューションを動作しない場合は、プロジェクトあなたにアイテムとしての.dllを追加し、makeはコンテンツとして、出力ディレクトリにコピーし、それを伝えることです。