Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C:\drive中写入文件权限问题_C#_Permissions_Elevated Privileges - Fatal编程技术网

C# 在C:\drive中写入文件权限问题

C# 在C:\drive中写入文件权限问题,c#,permissions,elevated-privileges,C#,Permissions,Elevated Privileges,我用c#开发了一个win应用程序,它在c:\drive的文件夹中生成文件。当尝试生成文件时,会出现权限问题,但当应用程序在C:\以外的驱动器中生成文件时,则不会出现问题。因此,当我将我的应用程序安装程序分发给最终用户时,我无法确定将安装我的应用程序的用户是否有权在C:\drive中生成文件 因此,请指导我如何克服这个问题我是否应该使用清单提升win OS中的应用程序? 我有一些文章 http://blogs.msdn.com/b/nikhiln/archive/2007/04/19/embed-

我用c#开发了一个win应用程序,它在c:\drive的文件夹中生成文件。当尝试生成文件时,会出现权限问题,但当应用程序在C:\以外的驱动器中生成文件时,则不会出现问题。因此,当我将我的应用程序安装程序分发给最终用户时,我无法确定将安装我的应用程序的用户是否有权在C:\drive中生成文件

因此,请指导我如何克服这个问题我是否应该使用清单提升win OS中的应用程序?

我有一些文章

http://blogs.msdn.com/b/nikhiln/archive/2007/04/19/embed-a-manifest-to-make-an-application-elevate-in-vista.aspx

http://www.codeproject.com/Articles/105506/Getting-Elevated-Privileges-on-Demand-using-C

http://archive.msdn.microsoft.com/KB981778

等等……请用正确的知识指导我。谢谢

您可以使用提升的权限再次启动应用程序,并在应用程序启动时进行一些检查,以确定是否存在这种情况。下面是一个例子:(小心不要陷入应用程序自身启动的无休止循环。)


不过,我同意将信息存储在“C:”中可能不是一个好主意。您可以尝试以下位置:Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

除非绝对必要,否则您不想提升权限。Windows不允许任何程序直接写入C:驱动器是有原因的。相反,请使用为此目的指定的文件夹C:\ProgramData。对于VS2005,没有名为programdata的文件夹,而是名为program files的文件夹。如果您使用的是Windows XP,则它将改为C:\Documents and Settings\All Users\Application Data。在Windows 7/8中,它是C:\ProgramData。
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        string[] args = Environment.GetCommandLineArgs();
        if (args.Length > 1 && args[1] == "-e") Text = "Elevated";
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Process process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = Application.ExecutablePath,
                Arguments = "-e",
                Verb = "runas",//-Admin.
            }
        };
        process.Start();
    }
}