C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

フォルダリダイレクトをC#でやりたい

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■88961 / inTopicNo.1)  フォルダリダイレクトをC#でやりたい
  
□投稿者/ Ante (19回)-(2018/10/17(Wed) 21:21:39)

分類:[C#] 

2018/10/17(Wed) 21:22:44 編集(投稿者)

■環境
OS:Windows 10 Enterprise 64-bit (10.0, Build 16299) (16299.rs3_release_svc.180808-1748)
IDE:VisualStudio2017
言語:C#

フォルダリダイレクトをC#でやりたいです。
C#経由による、CMD/Shell発行でも良いです。

例えば、「デスクトップ」は規定では、
「C:\Users\%USERNAME%\Desktop」となっていますが、
デスクトップのプロパティで場所タブを開くと、
移動というボタンがあり、移動先に、
「D:\%USERNAME%\Desktop」として、適用すると、
当該配下へデスクトップが移動されますが、
この挙動をC#で実装したいです。

物理的に移動させることの処理イメージはついていますが、
この挙動を示すメソッド・コマンドは存在しますでしょうか。

何か知恵があればお貸しください。

引用返信 編集キー/
■88962 / inTopicNo.2)  Re[1]: フォルダリダイレクトをC#でやりたい
□投稿者/ 魔界の仮面弁士 (1880回)-(2018/10/17(Wed) 21:59:30)
No88961 (Ante さん) に返信
> 「D:\%USERNAME%\Desktop」として、適用すると、
> 当該配下へデスクトップが移動されますが、
> この挙動をC#で実装したいです。

このあたりかな?

HKEY_CURRENT_USER\Software\Microsoft\Windows CurrentVersion\Explorer\Shell Folders
HKEY_CURRENT_USER\Software\Microsoft Windows\CurrentVersion\Explorer\User Shell Folders
https://support.microsoft.com/ja-jp/help/242557/registry-settings-for-folder-redirection-in-windows

引用返信 編集キー/
■88965 / inTopicNo.3)  Re[1]: フォルダリダイレクトをC#でやりたい
□投稿者/ とっちゃん (547回)-(2018/10/18(Thu) 10:53:40)
No88961 (Ante さん) に返信

> フォルダリダイレクトをC#でやりたいです。
> C#経由による、CMD/Shell発行でも良いです。
>
> 例えば、「デスクトップ」は規定では、
> 「C:\Users\%USERNAME%\Desktop」となっていますが、
> デスクトップのプロパティで場所タブを開くと、
> 移動というボタンがあり、移動先に、
> 「D:\%USERNAME%\Desktop」として、適用すると、
> 当該配下へデスクトップが移動されますが、
> この挙動をC#で実装したいです。
>
> 物理的に移動させることの処理イメージはついていますが、
> この挙動を示すメソッド・コマンドは存在しますでしょうか。
>
IKnownFolderManager というCOMインターフェースにRedirectとそのまんまなAPIがありました。
https://docs.microsoft.com/ja-jp/windows/desktop/api/shobjidl_core/nf-shobjidl_core-iknownfoldermanager-redirect

おそらくこれが該当する機能だと思いますが正直よくわかりません。

実験するなら、ディスクの再フォーマットが可能な環境で行うことをお勧めします。
Shellの機能呼び出しで失敗すると最悪OSは動くが画面を操作できないなどが発生する場合があります。

Shellというのは、OSの見た目をつかさどる部分に当たるため、そこでおかしな状況が発生するということになると
見た目を制御できないということになり、画面が出てくるが何もできないとか、起動したと思ったらそのままビジーループになるとか
OSを修復で治ればいいですが、最悪単に再インストールではダメ!ということもあります。

それらを覚悟のうえでAPIを使うようにしてください。変なことになったと言われても誰もリカバリーできませんので。


引用返信 編集キー/
■88966 / inTopicNo.4)  Re[2]: フォルダリダイレクトをC#でやりたい
□投稿者/ 774RR (633回)-(2018/10/18(Thu) 11:15:45)
そういや Windows10 1809 のインシデントは Known Folder Redirection のバグだったけ。
https://it.srad.jp/story/18/10/12/214220/

似たような危険性を含みかねないっすね。

引用返信 編集キー/
■88967 / inTopicNo.5)  Re[2]: フォルダリダイレクトをC#でやりたい
□投稿者/ Ante (20回)-(2018/10/18(Thu) 13:01:17)
魔界の仮面弁士 さん
いつもありがとうございます。

参考にさせていただきました。

下記実装で、要件を満たせました。

@Powershellの「SHSetKnownFolderPath」コマンドレットで、レジストリを書き換え
※HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

A@のみではファイル・フォルダは移動されないため、
Robocopyで移動

サンプル載せたいのですが、10000字オーバーするので、リンクします。
http://ante-mode.holy.jp/samples/CShape/FolderRedirect/_Program.htm

■参考
https://www.pinvoke.net/default.aspx/shell32.SHSetKnownFolderPath

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ