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

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

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

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

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

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

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

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

я пытался

webBrowser1.ScriptErrorsSuppressed = true;

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


person MatthewD    schedule 19.01.2016    source источник
comment
Небольшой совет: вы можете добавлять к своим строкам префикс @, чтобы не экранировать каждую обратную косую черту. например new Uri(@"C:\Temp\"); что касается вашего вопроса, я не верю, что вы можете подавить сообщение безопасности Windows, не изменив настройки безопасности.   -  person jacob    schedule 19.01.2016


Ответы (1)


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

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

Решение №1
Измените настройки безопасности в IE. В моей организации все заблокировано, поэтому изменения в настройках IE можно вносить только с помощью групповой политики.

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

Решение № 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, но для меня это не имеет большого значения. Вы можете добавить значки для известных типов файлов, которые у вас будут в списке изображений, и поместить некоторые операторы if (или переключать случаи) в раздел, где он добавляет элементы в список. Просто проанализируйте расширения файлов.

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

person MatthewD    schedule 20.01.2016