Ik ben met een project bezig waarin ik een viertal classes gemaakt heb die de instelling van het programma beschrijven. Deze classes heten: Settings, User, Permission en SecurityRule. Nu heb ik dus het hoofd project wat met deze instellingen wil gaan werken. Maar de instellingen worden gecodeerd en in binair formaat opgeslagen in een bestand. Nu wil ik dus een klein programmatje schrijven om de settings op een eenvoudige manier te laten zien (bij voorkeur in XML). Dus ik heb het volgende gedaan:
Een nieuw project gestart dat in een subfolder van het project staat van het hoofdproject (dat Interlink XP heet). Dit nieuwe project heet Settings Reader. Vervolgens heb ik de bestanden Settings.cs, User.cs, Permission.cs en SecurityRule.cs gelinked in dit nieuwe project. Daarna heb ik de volgende code in de Load event handler gezet:
PS: Ik heb m'n Key en IV ffies er uit gehaald, maar deze klopt, en ik heb hem gekopieërd uit het hoofd project.
Het probleem is dus nu dat op het regeltje: ServerSettings = (Settings) formatter.Deserialize(cs); ik een exception krijg. Om precies te zijn de exception:
Nu vraag ik me af, waarom heeft dit project de Assembly Interlink XP nodig? Ik heb immers de bestanden gelinked en de namespace is dus beschikbaar, maar waarom dan toch die Assembly? Overigens werkt het in een ander project wel, alleen gaat 't deserializen daar via XML.
Een nieuw project gestart dat in een subfolder van het project staat van het hoofdproject (dat Interlink XP heet). Dit nieuwe project heet Settings Reader. Vervolgens heb ik de bestanden Settings.cs, User.cs, Permission.cs en SecurityRule.cs gelinked in dit nieuwe project. Daarna heb ik de volgende code in de Load event handler gezet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| byte[] Key = {???};
byte[] IV = {???};
RijndaelManaged rij = new RijndaelManaged();
rij.Key = Key; rij.IV = IV; rij.Mode = CipherMode.ECB; rij.Padding = PaddingMode.PKCS7;
FileStream fs = new FileStream("c:\\windows\\system32\\Interlink XP Settings.bin", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
CryptoStream cs = new CryptoStream(fs, rij.CreateDecryptor(), CryptoStreamMode.Read);
Settings ServerSettings = new Settings();
IFormatter formatter = new BinaryFormatter();
try
{
ServerSettings = (Settings) formatter.Deserialize(cs);
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
fs.Close();
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
XmlSerializer serializer = new XmlSerializer(typeof(Settings));
serializer.Serialize(sw, ServerSettings);
txtSettings.Text = sb.ToString(); |
PS: Ik heb m'n Key en IV ffies er uit gehaald, maar deze klopt, en ik heb hem gekopieërd uit het hoofd project.
Het probleem is dus nu dat op het regeltje: ServerSettings = (Settings) formatter.Deserialize(cs); ik een exception krijg. Om precies te zijn de exception:
code:
1
2
3
| An unhandled exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll Additional information: File or assembly name Interlink XP, or one of its dependencies, was not found. |
Nu vraag ik me af, waarom heeft dit project de Assembly Interlink XP nodig? Ik heb immers de bestanden gelinked en de namespace is dus beschikbaar, maar waarom dan toch die Assembly? Overigens werkt het in een ander project wel, alleen gaat 't deserializen daar via XML.