[C#] @ voor string lijkt backslash te verdubbelen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
Hallo

Ik probeer een waarde in het register te schrijven in C#. Omdat er backslashes voorkomen in het registerpad escape ik de string met een @ ervoor, ik dacht dat de string dan als een literal zou worden meegenomen door m'n code.

Het schrijven in het register werkt echter niet, bij het debuggen zie ik dit:

Afbeeldingslocatie: https://i.imgur.com/qnfS8Wb.png

Het lijkt er dus op alsof alle backslashes verdubbeld zijn, hoe komt dit? Wat kan ik nog doen buiten een @ voor de string zetten?

Hartelijk dank voor de info!

Nu ik zelf nog eens beter naar de afbeelding kijk, zie ik dat de Name value wel met dubbele backslashes staat, maar de rk value wel juist staat. Alsnog worden de waardes niet weggeschreven, enig idee?

[ Voor 16% gewijzigd door Carharttguy op 19-10-2020 12:40 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • ThomasG
  • Registratie: Juni 2006
  • Laatst online: 23-09 14:00
String literal in C# zijn een stukje sugar coating voor de programmeur, omdat een non-escaped string veel makkelijker te lezen en/of te bewerken is. Onder de motor kan wordt het natuurlijk gewoon een escaped-string.

Acties:
  • 0 Henk 'm!

  • AlphaRomeo
  • Registratie: Maart 2007
  • Laatst online: 19:52

AlphaRomeo

FP PowerMod
De dubbele backslash is een escaped character. Hier meer informatie over de @ om literal strings toe te passen: https://docs.microsoft.co...reference/tokens/verbatim.

En hier een ander artikel over escaping in het algemeen: https://csharpindepth.com/articles/Strings

Acties:
  • 0 Henk 'm!

  • KirovAir
  • Registratie: September 2009
  • Laatst online: 02-10 23:25
ThomasG schreef op maandag 19 oktober 2020 @ 12:57:
String literal in C# zijn een stukje sugar coating voor de programmeur, omdat een non-escaped string veel makkelijker te lezen en/of te bewerken is. Onder de motor kan wordt het natuurlijk gewoon een escaped-string.
Dit dus.
Het daadwerkelijke issue is waarschijnlijk dat je onvoldoende rechten hebt om aan die key te sleutelen.

"The only thing more dangerous than a hardware guru with a code patch is a programmer with a soldering iron."


Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
KirovAir schreef op maandag 19 oktober 2020 @ 13:17:
[...]


Dit dus.
Het daadwerkelijke issue is waarschijnlijk dat je onvoldoende rechten hebt om aan die key te sleutelen.
Dat snap ik, maar hoe verkrijg je die rechten dan? Ik voer de code uit als administrator.

code:
1
2
3
RegistryKey rk = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList", true);
                    rk.SetValue(lastLogOff.TargetUsername, 1, RegistryValueKind.DWord);
                    rk.Close();


Ik specificeer ook met de 'true' dat ik schrijfrechten wil op die key.

Acties:
  • +1 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
Ik heb het probleem gevonden: https://stackoverflow.com...gistry-key-is-not-created

Ik heb gespecificeerd dat de applicatie 64 bit is, en dan lukt het wel!
Pagina: 1