C# 假如电脑目录是只读的设置外部目录能行不
时间: 2023-10-19 20:18:29 浏览: 28
如果电脑目录是只读的,那么您在 C# 中使用 `System.Diagnostics.ProcessStartInfo` 类启动外部程序时,也只能读取该目录下的文件,无法在该目录下创建、修改或删除文件。
如果您需要在只读目录外启动外部程序,可以将外部程序复制到您有写入权限的目录下,并在该目录下启动外部程序。以下是一个示例代码:
```csharp
string sourcePath = "D:\\readonly_directory\\external_program.exe";
string targetPath = "D:\\writable_directory\\external_program.exe";
File.Copy(sourcePath, targetPath, true); // 复制外部程序到可写目录
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = targetPath; // 启动复制后的外部程序
startInfo.WorkingDirectory = "D:\\writable_directory";
Process.Start(startInfo);
```
在上面的示例中,我们将只读目录中的外部程序复制到可写目录中,并在可写目录下启动复制后的外部程序。这样就可以避免在只读目录下启动外部程序时遇到的访问权限问题。
相关问题
C# 设置外部程序所在的目录会有文件夹权限问题么
如果您在 C# 中设置外部程序所在的目录,可能会遇到文件夹权限问题。如果您的程序需要在指定目录下创建、修改或删除文件,那么您需要确保当前用户对该目录具有足够的权限。
如果您在 C# 中启动的外部程序需要访问特定的目录,那么您也需要确保当前用户对该目录具有足够的权限。您可以使用 `System.IO.Directory` 类的 `GetAccessControl` 方法来获取指定目录的访问控制列表,然后使用 `System.Security.AccessControl.FileSystemAccessRule` 类来检查当前用户是否具有所需的访问权限。以下是一个示例代码:
```csharp
string path = "D:\\external_program_directory";
DirectorySecurity security = Directory.GetAccessControl(path);
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
AuthorizationRuleCollection rules = security.GetAccessRules(true, true, typeof(SecurityIdentifier));
foreach (AuthorizationRule rule in rules)
{
FileSystemAccessRule fsRule = rule as FileSystemAccessRule;
if (fsRule != null && fsRule.IdentityReference.Equals(identity.User) && (fsRule.FileSystemRights & FileSystemRights.Modify) == FileSystemRights.Modify)
{
// 当前用户具有修改目录权限
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "external_program.exe";
startInfo.WorkingDirectory = path;
Process.Start(startInfo);
break;
}
}
```
在上面的示例中,我们首先使用 `Directory.GetAccessControl` 方法获取指定目录的访问控制列表,然后使用 `WindowsIdentity.GetCurrent` 方法获取当前用户的标识,最后使用 `WindowsPrincipal` 类来检查当前用户是否具有所需的访问权限。如果当前用户具有修改目录权限,则启动外部程序,并设置其启动目录为指定的目录。
C# 启动外部程序如何限制启动目录为外部程序的目录
您可以使用 `System.Diagnostics.ProcessStartInfo` 类来启动外部程序,并通过设置 `WorkingDirectory` 属性来限制外部程序的启动目录。以下是一个示例代码:
```csharp
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "external_program.exe";
startInfo.WorkingDirectory = "D:\\external_program_directory"; // 设置外部程序的启动目录
Process.Start(startInfo);
```
在上面的示例中,我们将 `WorkingDirectory` 属性设置为外部程序所在的目录,这样在启动外部程序时就会限制其启动目录为指定的目录。