我知道Windows 7中的用户帐户默认是受限制的,因此程序不能只写在系统的任何地方(就像在Win XP中一样)。
但我认为有可能允许c#app在其自己的exe目录或其子文件夹中写入(至少不是所有的“用户设置”或应写入“MyDocuments”......)。
所以目前我的c#app在尝试在exe目录中写入时会抛出一个UnauthorizedAccessException。
你可以在c#代码中做些什么来允许在exe目录中写入吗?
答案 0 :(得分:4)
不,如果您的应用程序运行的用户没有写入此文件夹的权限,则无法写入该文件夹。在安装应用程序时(可能通过MSI),您可以授予必要的权利。
你也可以provide a manifest file申请。
答案 1 :(得分:4)
你可以在c#代码中做些什么来允许在exe目录中写入吗?
是的,但是这段代码(更改权限)需要以管理员权限执行,所以你回到了开始。
在我看来,正确的方式是在安装过程中在自定义操作中为C:\ProgramData
下的目录(实际上是Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
)设置适当的写入权限你的软件。
答案 2 :(得分:1)
是
将程序安装在用户具有写入/修改权限的位置。
(当然,这会打开那些修改程序的用户。)
答案 3 :(得分:-2)
是的,您应该确保您的程序运行具有管理员权限。
您可以通过右键单击exec并单击“以管理员身份运行”手动执行此操作,也可以从代码中要求程序以管理员权限运行。
WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator);
if (!hasAdministrativeRight)
{
RunElevated(Application.ExecutablePath);
Environment.Exit(0);
}
private static void RunElevated(string fileName)
{
ProcessStartInfo processInfo = new ProcessStartInfo();
processInfo.Verb = "runas";
processInfo.FileName = fileName;
try
{
Process.Start(processInfo);
}
catch (Win32Exception)
{
MessageBox.Show("Program needs administrator rights");
}
}