拒绝访问 AppDomain.CurrentDomain.BaseDirectory

问题描述

我创建了一个具有更新系统的应用程序,这是非常规的:

此应用程序从以下位置安装和运行:

C:\Program Files (x86)\Application test

可执行文件调用

searchdata.exe

但在某个时候,我想出了一个好主意,即通过以下步骤制作一个更新系统:

  1. 点击更新按钮:检查 update.exe 可执行文件是否存在。
  • 如果存在则立即执行,并关闭 searchdata.exe
  • 它不存在:从 URL 下载 update.dat重命名为 update.exe。
  1. 这是下载和进度条脚本:
private void backgroundWorker1_DoWork(object sender,DoWorkEventArgs e)
        {
            DownloadFileWithProgress("http://test.pro/installer/update.dat",AppDomain.CurrentDomain.BaseDirectory + "update.exe",ProgressBar1,Label4);
        }

        private void DownloadFileWithProgress(string DownloadLink,string TargetPath,ProgressBar Progress,Label LabelProgress)
        {
            int bytesProcessed = 0;
            Stream remoteStream = null;
            Stream localStream = null;
            HttpWebResponse response = null;
            try
            {
                WebRequest request = WebRequest.Create(DownloadLink);
                double TotalBytesToReceive = 0;
                var SizewebRequest = WebRequest.Create(new Uri(DownloadLink));
                SizewebRequest.Method = "HEAD";
                using (var WebResponse = SizewebRequest.GetResponse())
                {
                    var fileSize = WebResponse.Headers.Get("Content-Length");
                    TotalBytesToReceive = Convert.Todouble(fileSize);
                }
                response = (HttpWebResponse)request.GetResponse();
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    remoteStream = response.GetResponseStream();
                    string filePath = TargetPath;
                    localStream = File.Create(filePath);
                    byte[] buffer = new byte[1024];
                    int bytesRead = 0;
                    do
                    {
                        bytesRead = remoteStream.Read(buffer,buffer.Length);
                        localStream.Write(buffer,bytesRead);
                        bytesProcessed += bytesRead;
                        double bytesIn = double.Parse(bytesProcessed.ToString());
                        double percentage = bytesIn / TotalBytesToReceive * 100;
                        percentage = Math.Round(percentage,0);
                        if (Progress.Invokerequired)
                        {
                            Progress.Invoke(new MethodInvoker(() =>
                            {
                                Progress.Value = int.Parse(Math.Truncate(percentage).ToString());
                            }));
                        }
                        else
                        {
                            Progress.Value = int.Parse(Math.Truncate(percentage).ToString());
                        }
                        if (LabelProgress.Invokerequired)
                        {
                            LabelProgress.Invoke(new MethodInvoker(() =>
                            {
                                LabelProgress.Text = int.Parse(Math.Truncate(percentage).ToString()) + "%";
                            }));
                        }
                        else
                        {
                            LabelProgress.Text = int.Parse(Math.Truncate(percentage).ToString()).ToString() + "%";
                        }
                    }
                    while (bytesRead > 0);
                }
                else
                {
                    throw new ArgumentException(response.StatusDescription,"Respuesta del Servidor");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error en DownloadFileWithProgress" + ex.Message);
            }
            finally
            {
                if (response != null)
                    response.Close();
                if (remoteStream != null)
                    remoteStream.Close();
                if (localStream != null)
                    localStream.Close();
            }
        }
  1. 问题是我以普通权限运行,我不想必须使用管理权限,但是在尝试将文件写入应用程序目录时,执行给我一个访问被拒绝错误

  2. 感谢您对第 3 点的帮助,如果您能看到脚本,我不知道您能给我带来哪些改进。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)