通过链接启动应用程序时System.UnauthorizedAccessException

时间:2015-11-19 10:14:11

标签: c# windows permissions

我写了一个应用程序(C#,VS2013),然后添加安装(flexera)。 安装过程向ProgramFiles direcotiry提供复制文件,并在桌面上创建快捷方式(链接)。 所以,当我点击快捷方式 - 程序无法启动时,在Windows事件日志中我看到了这些例外情况:

  

Сведенияобисключении:System.UnauthorizedAccessExceptionСтек:в   System.IO .__ Error.WinIOError(Int32,System.String)в   System.IO.Directory.InternalCreateDirectory(System.String,   System.String,System.Object,Boolean)в   System.IO.Directory.InternalCreateDirectoryHelper(System.String,   Boolean)вmain_windows.Settings.Log(System.String)в   main_windows.Settings..ctor()вmain_windows.Program.Main()

如果我以管理员身份启动快捷方式 - 一切都很好。

那时,如果我转到已安装程序的文件夹并单击exe文件 - 它会启动,无需以管理员身份启动它。

我尝试了不同的方法来解决这个问题,方法是更改​​文件夹和文件的权限,包括关闭/继续继承,但是不成功......

问题 - 我能做些什么来解决我的问题。

2 个答案:

答案 0 :(得分:0)

namespace main_windows
{

    static class Program
    {
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool SetForegroundWindow(IntPtr hWnd);
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            bool createdNew = true;
            using (Mutex mutex = new Mutex(true, "Settings", out createdNew))
            {
                if (createdNew)
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new Settings());
                }
                else
                {
                    Process current = Process.GetCurrentProcess();
                    foreach (Process process in Process.GetProcessesByName(current.ProcessName))
                    {
                        if (process.Id != current.Id)
                        {
                            SetForegroundWindow(process.MainWindowHandle);
                            break;
                        }
                    }


                }
            }
        }
    }
}

答案 1 :(得分:0)

{{1}}