【问题标题】:Write file in C:\ drive permission issue [closed]在 C:\ 驱动器权限问题中写入文件 [关闭]
【发布时间】:2014-05-15 18:55:44
【问题描述】:

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

所以请指导我如何克服这个问题。 我应该在 win OS 中使用 Manifests 来提升应用程序吗?

我有一些文章

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

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

【问题讨论】:

  • 除非绝对必要,否则您不想提升权限。 Windows 不允许任何程序直接写入 C: 驱动器是有原因的。相反,请使用为此目的指定的文件夹 C:\ProgramData。
  • 没有名为 programdata 的文件夹,而是名为 program files 的文件夹。
  • 如果您使用的是 Windows XP,那么它将改为 C:\Documents and Settings\All Users\Application Data。在 Windows 7/8 中,它是 C:\ProgramData。

标签: c# permissions elevated-privileges


【解决方案1】:

您可以使用提升的权限再次启动您的应用程序,并在应用程序启动时进行一些检查,看看是否是这种情况。这是一个示例:(注意不要进入应用程序自行启动的无限循环。)

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();
    }
}

不过,我同意将信息存储在“C:”中可能不是一个好主意。你可以试试这样的地方:Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 2011-11-14
    • 2011-12-14
    • 1970-01-01
    • 2017-03-24
    • 2023-04-01
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多