簡體   English   中英

打開文件時的Windows安全消息

[英]Windows Security Message when opening file

我有一個帶有webBrowser控件的Windows窗體桌面應用程序。 我導航到服務器webBrowser1.Navigate(new Uri("\\\\\\\\srvername\\\\share\\\\directory\\\\"))上的webBrowser1.Navigate(new Uri("\\\\\\\\srvername\\\\share\\\\directory\\\\"))以允許用戶從該目錄打開文件。

在此處輸入圖片說明

當他們雙擊文件時,他們每次都會收到Windows安全消息。

在此處輸入圖片說明

當他們單擊“確定”時,文件將根據需要打開。

如果設置為導航到本地目錄webBrowser1.Navigate(new Uri("C:\\\\Temp\\\\")); 我沒有收到消息。

有沒有一種編程的方式來防止這種情況出現,或者這是必須作為受信任的站點添加到瀏覽器中的東西嗎? 我們網絡上的標准用戶無權添加受信任的站點。 我試圖檢查IE的本地Intranet部分中的“包括所有網絡路徑UNC”。

我努力了

webBrowser1.ScriptErrorsSuppressed = true;

但這不起作用,因為這似乎意味着腳本錯誤是由控件中顯示的網頁發生的。

我發現了兩個解決方案。

可能嗎? 正如@jacob和我的所有研究所暗示的那樣,我認為不是。 如果要使用webBrowser控件查看本地或UNC路徑,則必須更改IE安全性或處理打開的每個文件的消息。

復溶#1
在IE中更改安全設置。 我的組織鎖定了所有內容,因此只能通過組策略來更改IE設置。

  1. 通過組策略將file://servername/*添加到Intranet區域,以獲取所需的域OU。
  2. 通過組策略為所需的域OU啟用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語句(或切換用例)。 只需分析文件擴展名即可。

希望有一天能對某人有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM