Сообщение безопасности Windows при открытии файла

У меня есть настольное приложение Windows формы с элементом управления webBrowser. Я перехожу в каталог на сервере webBrowser1.Navigate(new Uri("\\\\srvername\\share\\directory\\")) чтобы позволить пользователям открывать файлы из этого каталога.

введите описание изображения здесь

Когда они дважды щелкают по файлам, они каждый раз получают сообщение безопасности Windows.

введите описание изображения здесь

Когда они нажимают ОК, файл открывается по желанию.

Если я установил перейти к локальному каталогу webBrowser1.Navigate(new Uri("C:\\Temp\\")); Я не понимаю сообщение.

Есть ли программный способ, чтобы это не отображалось или это нужно добавить в браузер как надежный сайт? Обычные пользователи в нашей сети не имеют доступа для добавления доверенных сайтов. Я попытался проверить "Включить все сетевые пути UNC" в разделе локальной интрасети IE.

я пытался

webBrowser1.ScriptErrorsSuppressed = true;

но это не работает, так как кажется, что ошибки скрипта происходят с веб-страницы, отображаемой в элементе управления.

1 ответ

Решение

Ну, я нашел два решения на мой вопрос.

Является ли это возможным? Как @jacob и все мои исследования показывают, я не думаю, что это так. Если вы собираетесь использовать элемент управления webBrowser для просмотра локального или UNC-пути, вам придется внести изменения в безопасность IE или обработать сообщение для каждого открываемого файла.

Resulution # 1
Измените настройки безопасности в IE. В моей организации все заблокировано, поэтому изменения в настройках IE могут быть сделаны только через групповую политику.

  1. добавлять file://servername/* в зону интрасети с помощью групповой политики для нужного домена OU.
  2. Включите параметр IE "Запуск приложений и файлов в политике IFRAME" через групповую политику для нужного подразделения домена.

Resulution # 2
Замените элемент управления webBrowser в моем приложении другими элементами управления, которые могут выполнять те же функции. Это то, с чем я столкнулся, чтобы иметь больше контроля над всей работой с файлами и каталогами. Мне также не нужно беспокоиться о корректности и правильности работы параметров безопасности и применения групповой политики. Я также не должен волноваться об изменениях в этих областях, влияющих на меня.

Вот статья, которую я использовал, чтобы начать

Прогулка, как это работает довольно хорошо. Я прошел через это в одном проекте, прежде чем интегрировать его в свой проект. Мне нужно изменить несколько вещей, чтобы удовлетворить меня. Вот мой код, как это закончилось. Я внес некоторые изменения и добавил некоторые события выбора / нажатия.

    Boolean FocusTreeview = false;

    public frmMain()
    {
        InitializeComponent();
        treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);
    }

    // Start by calling this.
    private void PopulateTreeView()
    {
        TreeNode rootNode;

        treeView1.Nodes.Clear();
        listView1.Items.Clear();

        DirectoryInfo info = new DirectoryInfo("Pass the root folder here.");

        // Add the root directory.
        if (info.Exists)
        {
            rootNode = new TreeNode(info.Name);
            rootNode.Tag = info;
            GetDirectories(info.GetDirectories(), rootNode);
            treeView1.Nodes.Add(rootNode);
            treeView1.Nodes[0].Expand();
            // This selects the root directory
            NodeSelect(rootNode);
        }
    }

    /********************************************/

    private void GetDirectories(DirectoryInfo[] subDirs, TreeNode nodeToAddTo)
    {
        // This will list all the directories and subdirectories
        TreeNode aNode;
        DirectoryInfo[] subSubDirs;
        foreach (DirectoryInfo subDir in subDirs)
        {
            aNode = new TreeNode(subDir.Name, 0, 0);
            aNode.Name = subDir.ToString();
            aNode.Tag = subDir;
            aNode.ImageKey = "Directory";
            subSubDirs = subDir.GetDirectories();
            if (subSubDirs.Length != 0)
            {
                GetDirectories(subSubDirs, aNode);
            }
            nodeToAddTo.Nodes.Add(aNode);
        }
    }

    /********************************************/

    private void NodeSelect(TreeNode newSelected)
    {
        //Load all the files and directorys in the selected node from the treeview
        listView1.Items.Clear();
        DirectoryInfo nodeDirInfo = (DirectoryInfo)newSelected.Tag;
        ListViewItem.ListViewSubItem[] subItems;
        ListViewItem item = null;

        foreach (DirectoryInfo dir in nodeDirInfo.GetDirectories())
        {
            item = new ListViewItem(dir.Name, 0);
            subItems = new ListViewItem.ListViewSubItem[]
              {new ListViewItem.ListViewSubItem(item, "Directory"), 
               new ListViewItem.ListViewSubItem(item, 
            dir.LastAccessTime.ToShortDateString())};
            item.SubItems.AddRange(subItems);
            listView1.Items.Add(item);
        }
        foreach (FileInfo file in nodeDirInfo.GetFiles())
        {
            item = new ListViewItem(file.Name, 1);
            subItems = new ListViewItem.ListViewSubItem[] { new ListViewItem.ListViewSubItem(item, "File"), new ListViewItem.ListViewSubItem(item, file.LastAccessTime.ToShortDateString()) };

            item.SubItems.AddRange(subItems);
            listView1.Items.Add(item);
        }

        listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
    }

    /********************************************/

    void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        TreeNode newSelected = e.Node;
        NodeSelect(newSelected);
    }

    /********************************************/

    private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        // When something is selected load it's contents to the listview if it is a directory
        if (listView1.SelectedItems.Count > 0)
        {
            var item = listView1.SelectedItems[0];

            // Don't do anything if it's just a file
            if (item.SubItems[1].Text == "File")
            {
                return;
            }

            TreeNode[] tns = treeView1.Nodes.Find(item.Text, true);
            if (tns.Length > 0)
            {
                treeView1.Focus();
                NodeSelect(tns[0]);
                treeView1.SelectedNode = tns[0];
                tns[0].Expand();
                FocusTreeview = true;
            }
        }
    }

    /********************************************/

    private void listView1_MouseUp(object sender, MouseEventArgs e)
    {
        // This needs to be done so the directory appears to stay selected in the treeview
        if (FocusTreeview == true)
        {
            treeView1.Focus();
            FocusTreeview = false;
        }
    }

    /********************************************/

    private void listView1_DoubleClick(object sender, EventArgs e)
    {
        // This will open the files that are double clicked on
        if (listView1.SelectedItems.Count > 0)
        {
            var item = listView1.SelectedItems[0];

            // Don't do anything for directories
            if (item.SubItems[1].Text == "Folder")
            {
                return;
            }

            // Open the selected file
            Process.Start(globals.szJobFolderPath + item.Text);

        }
    }

Это закончилось тем, что выглядело так.

введите описание изображения здесь

Вы теряете значки известных файлов, таких как Word docs, но для меня это не имеет большого значения. Вы можете добавить значки для известных типов файлов, которые у вас будут, в свой список изображений и поместить некоторые операторы if (или переключить регистры) в раздел, где он добавляет элементы в просмотр списка. Просто проанализируйте расширения файлов.

Надеюсь, это поможет кому-нибудь когда-нибудь!

Другие вопросы по тегам