---
title: "DOS Prompt"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/85576-dos-prompt"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "aleborg"
published: "2003-09-09T07:52:05.000Z"
updated: "2003-10-14T15:14:30.000Z"
replies: 36
views: 1172
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/85576-dos-prompt"
---

# DOS Prompt

_Sida 1 av 2._

## #1 — aleborg, 2003-09-09T07:52Z

Jag vill köra ett kommando via dosprompten från ett program i C#, någon som vet hur man gör detta?

Permalänk: https://www.webforum.nu/p/85576

## #2 — Marcus E, 2003-09-09T10:35Z

I NT/2000/XP kan du köra "cmd /c kommandot".

I andra versioner kan det fungera om du byter ut cmd mot command. Tänk på att de kommandon som finns skiljer sig mellan operativsystemen.

Permalänk: https://www.webforum.nu/p/1153689

## #3 — aleborg, 2003-09-09T10:44Z

men hur gör man det via C#?
jag ska köra ett kommando direkt i från koden...

Permalänk: https://www.webforum.nu/p/1153693

## #4 — niko, 2003-09-09T10:51Z

Det beror lite på vad du vill göra. Vill du bara slänga iväg kommandot i en egen tråd/process utan att bry dig om resultatet/outputen så duger det väl med interop + CreateProcess eller ShellExecute.

Annars: <http://www.experts-exchange.com/Programming/Programming_Languages/C_Sharp/Q_20656555.html>

Permalänk: https://www.webforum.nu/p/1153696

## #5 — aleborg, 2003-09-09T11:36Z

Det jag ska göra är att sätta rättigheter på filer o mappar mha calc, hittar tyvärr inget annat smidigt sätt att göra det på :(
Vet inte om den returnerar nått...

Permalänk: https://www.webforum.nu/p/1153713

## #6 — niko, 2003-09-09T12:59Z

Calc? cacls, menar du? Men, oavsett vilket så kan du väl använda koden i länken ovan och ändra värdena på *UseShellExecute* och *RedirectStandardOutput* ifall du inte är intresserad av returvärdena/outputen? Det förenklar ju koden avsevärt.

Permalänk: https://www.webforum.nu/p/1153753

## #7 — aleborg, 2003-09-09T13:04Z

Japp det menar jag, tack :)
Du vet inget bättre sätt att ändra fil/mapp rättigheter på?

Permalänk: https://www.webforum.nu/p/1153757

## #8 — niko, 2003-09-09T13:18Z

En variant är att använda DllImport och köra på de gamla vanliga Win32-API:erna: *SetFileSecurity*, *GetFileSecurity* osv ..

Sen finns det tydligen möjligheter även via [System.DirectoryServices](http://www.codeproject.com/dotnet/adduseracetofile.asp) i Frameworken.

Fast det är nog svårt att påstå att nån av dem är *enklare* än att bara "shella" cacls.exe.

Permalänk: https://www.webforum.nu/p/1153766

## #9 — aleborg, 2003-09-09T13:25Z

cacls.exe kan missa i bland har jag märkt!
DllImport låter intressant, har du mer info om det?
System.DirectoryServices kan inte sätta för ett speciellt konto vad jag har kunnat se efter ganska mycket efterforskningar i det!

det jag behöver är en klass som man kan skicka in vilket konto som ska ha rättigheter på en viss mapp/fil samt vilka rättigheter. Typ 
SetPermissions.User="MittKonto";
SetPermissions.Path=@"C:\\www\\minmapp";
SetPermissions.Read=true;
SetPermissions.Write=true;
SetPermissions.Execute=false;

eller nått sånt :D

Permalänk: https://www.webforum.nu/p/1153770

## #10 — niko, 2003-09-09T13:57Z

> **aleborg skrev:**
>
> DllImport låter intressant, har du mer info om det?

Ja, alltså *DllImport* används ju bara för att länka in de gamla "native" API:erna som *SetFileSecurity* osv .. Fast det är en jäkla massa mek och all exempelkod du hittar kommer att vara i C++/VB.

> **aleborg skrev:**
>
> System.DirectoryServices kan inte sätta för ett speciellt konto vad jag har kunnat se efter ganska mycket efterforskningar i det!

OK. Det visste jag inte. Jag uppfattade att ASPNET bara användes som ett exempel i länken ovan.

Men annars: Har du kollat på den [här](http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=e6098575-dda0-48b8-9abf-e0705af065d9)?

Permalänk: https://www.webforum.nu/p/1153788

## #11 — aleborg, 2003-09-09T15:42Z

tack, såg nu att det gick med importen av Active DS Type Library utan den verkar det inte gå vad jag sett iaf, men jag kan ha fel :e

Permalänk: https://www.webforum.nu/p/1153839

## #12 — aleborg, 2003-09-09T16:06Z

Sitter nu med den här koden:

```
			ADsSecurityUtilityClass secuUtil = new ADsSecurityUtilityClass();
			object ob = secuUtil.GetSecurityDescriptor(strFile,(int)ActiveDs.ADS_PATHTYPE_ENUM.ADS_PATH_FILE,(int)ActiveDs.ADS_SD_FORMAT_ENUM.ADS_SD_FORMAT_IID);
			if (null != ob)
			{
				ActiveDs.IADsSecurityDescriptor sd = (IADsSecurityDescriptor)ob;
				ActiveDs.IADsAccessControlList obDacl =	(ActiveDs.IADsAccessControlList)sd.DiscretionaryAcl;
				bool bAddAce = true;
				IEnumerator obAceEnum = obDacl.GetEnumerator();
				while (obAceEnum.MoveNext())
				{
					IADsAccessControlEntry obAce = (IADsAccessControlEntry)obAceEnum.Current;
					// Check if "ASPNET" account is trustee of ACE or not.
					if (obAce.Trustee.IndexOf(user) != -1)
					{
						// Check if this is a ALOWED Ace or not.
						if (obAce.AceType == (int)ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED)
						{
							bAddAce = false;
						}
					}
				}

				// If bAddAce flag is set, then we will add it.
				if (bAddAce)
				{
					AccessControlEntryClass obNewAce = new AccessControlEntryClass();
					obNewAce.AceType = (int)ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED;
					obNewAce.Trustee = @user;
					obNewAce.AccessMask = -1;
					obDacl.AddAce(obNewAce);
					sd.DiscretionaryAcl = obDacl;
					secuUtil.SetSecurityDescriptor(strFile,(int)ADS_PATHTYPE_ENUM.ADS_PATH_FILE,sd,(int)ADS_SD_FORMAT_ENUM.ADS_SD_FORMAT_IID);
				}
```

på filer sätter den fulla rättigheter och mappar så läggs den till men rättigheterna syns bara i avancerade delen och där har den fulla.
Någon som kan hjälpa mig ändra så att den sätter "modify" rättigheter på mappar och filer eller  bara "read"?

Permalänk: https://www.webforum.nu/p/1153850

## #13 — niko, 2003-09-09T18:19Z

Hmm .. Måste man sitta på en domänkontrollant för att kunna kompilera? Min Active DS Type Library verkar iaf inte innehålla hälften av vad som behövs.

Men i vilket fall som helst så rekommenderar jag fortfarande att du kollar på den [här](http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=e6098575-dda0-48b8-9abf-e0705af065d9). Den innehåller en funktion *TestSetFileSec* i TestClass.cs som är precis vad du behöver (jag har testat).

```
static void TestSetFileSec ()
{
	string filename = @"f:\a.txt";
	SecurityDescriptor secDesc = SecurityDescriptor.GetFileSecurity (filename, SECURITY_INFORMATION.DACL_SECURITY_INFORMATION);
	Dacl dacl = secDesc.Dacl;
	dacl.AddAce (new AceAccessAllowed (new Sid ("dator\\användare"), AccessType.GENERIC_WRITE|AccessType.GENERIC_READ));
	secDesc.SetDacl(dacl);
	secDesc.SetFileSecurity(filename, SECURITY_INFORMATION.DACL_SECURITY_INFORMATION);
}
```

Tips:

1\. Packa upp projektet.
2\. Dra igång WhoIsProc.sln i toppmappen.
3\. "Remova" direkt WhoIsProc och WhoIsProcUI från projektet. Annars får du problem. (Jag fick det iaf.)
4\. Högerklicka på TestSecurity och sätt som "Start up project".

Permalänk: https://www.webforum.nu/p/1153950

## #14 — aleborg, 2003-09-09T19:55Z

Men hur ska jag använda den från min egna applikation? Det räcker inte med att göra en referens till DLL-filen iaf!

(102): 'SecurityDescriptor' is an ambiguous reference

Permalänk: https://www.webforum.nu/p/1153999

## #15 — niko, 2003-09-09T20:19Z

> Det räcker inte med att göra en referens till DLL-filen iaf!

Jo? Det funkar utmärkt hos mig bara man lägger till:

```
using System.Runtime.InteropServices;
using Microsoft.Win32.Security;
```

> (102): 'SecurityDescriptor' is an ambiguous reference

Fast det måste väl bero på en konflikt med en annan referens? Active DS Type Library tex? Antingen tar du bort den eller så kör du på fullständiga namn genomgående:

```
Microsoft.Win32.Security.SecurityDescriptor
```

 osv ..

Permalänk: https://www.webforum.nu/p/1154009

## #16 — aleborg, 2003-09-09T21:14Z

Nu så funkar det :D
Men det är mysko inställningar för rättigheterna, det är bara "speciella" rättigheter och om man sätter på en mapp så ärvs det inte "Traverse folder / Execute file" måste kryssas i samt "Apply onto: This folder, subfolders and files" men det verkar omöjligt :(

Permalänk: https://www.webforum.nu/p/1154028

## #17 — niko, 2003-09-09T21:44Z

Ja, du .. Nu har jag inte fördjupat mig så mycket och dokumentationen är obefintlig, men jag skulle nog påstå att den är väldigt komplett.

Vad sägs tex om:

```
Microsoft.Win32.Security.AceFlags.[b]INHERITED[/b]_ACE;
Microsoft.Win32.Security.DirectoryAccessType.FILE_[b]TRAVERSE[/b];
```

?

Det mesta (allt?) går nog att få rätt på via lite snokande och rätt *mycket* trial-and-error.

Permalänk: https://www.webforum.nu/p/1154048

## #18 — aleborg, 2003-09-10T08:00Z

Upptäckte även att det fanns DirectoryAccessType mm, men jag kan inte komma på hur man använder det i koden :(

Permalänk: https://www.webforum.nu/p/1154115

## #19 — aleborg, 2003-09-10T10:04Z

Det löste sig, man kunde sätta AceFlags också!

Permalänk: https://www.webforum.nu/p/1154161

## #20 — niko, 2003-09-10T10:48Z

Hur blev då koden för det du ville göra? Jag frågar eftersom jag själv tycker det här med rättigheter är en djungel och det är bra att veta.

Permalänk: https://www.webforum.nu/p/1154197

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/85576-dos-prompt  
Nästa sida: https://www.webforum.nu/amne/dotnet/85576-dos-prompt/page2.md
