[WPF] WPF FolderBrowserDialog 네트워크 드라이브 보여주기

소개

  • 안녕하세요. 오늘은 WPF에서 FolderBrowerDialog 를 이용하여 네트워크 드라이브로 설정된 경로를 보여주는 방법에 대해서 알려 드리려고 합니다.
  • 실무에서 네트워크 드라이브를 설정하고, 설정된 경로에 파일 혹은 이미지를 업로드, 다운로드 하는 경우들이 많이 있습니다.
  • 하지만 WPF에서 관리자 모드로 실행할 경우, FolderBrowserDialog를 이용할 경우 네트워드 드라이브로 설정된 경로가 나오지 않는 문제가 있습니다.
  • 해당 문제를 해결하는 방법에 대해서 알려 드리려고 합니다.

해결 방법

  • 위에서 말씀 드렸듯이, 관리자 모드로 개발한 WPF 프로그램에서 FolderBrowserDialog를 이용할 경우 네트워크 드라이브로 설정된 경로는 나오지 않는 문제가 있습니다.
  • 하지만, 구글링을 통해서 관리자 모드에서도 FolderBrowserDialog에서 네트워크 드라이브 경로를 보여지게 하는 방법에 대해서 알게 되어서 여러분들에게 공유해 드리려고 합니다.
  • 해당 부분은 StackOverFlow에서 자료를 찾아서 예제 프로그램을 만든 것입니다.

예제 코드

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="238.5" Width="384.5">
    <Grid>
        <Button x:Name="button" Content="경로 선택" 
                HorizontalAlignment="Left" 
                Margin="44,33,0,0" 
                VerticalAlignment="Top" 
                Width="282" 
                Click="button_Click" 
                Height="137"/>
    </Grid>
</Window>
using Microsoft.Win32;
using System.Diagnostics;
using System.Windows;
using System.Windows.Forms;

namespace WpfApp1
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            ConfigureWindowsRegistry();
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            FolderBrowserDialog fbd = new FolderBrowserDialog();

            if(fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                Debug.WriteLine(fbd.SelectedPath);
            }
        }

        public void ConfigureWindowsRegistry()
        {
            RegistryKey localMachine = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); 

            var reg = localMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true);
            if (reg == null)
            {
                reg = localMachine.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true);
            }

            if (reg.GetValue("EnableLinkedConnections") == null)
            {
                reg.SetValue("EnableLinkedConnections", "1", RegistryValueKind.DWord);
                Debug.WriteLine(
                    "Your configuration is now created,you have to restart your device to let app work perfektly");
            }
        }
    }
}

실행 결과

  • 프로그램 실행 결과, FolderBrowserDialog를 이용해도 네트워크 드라이브로 설정된 경로가 제대로 나오는 것을 확인할 수 있습니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY