|
According to the source, the SetEnvironmentVariable method broadcasts the WM_SETTINGCHANGE message for you:
IntPtr r = Win32Native.SendMessageTimeout(new IntPtr(Win32Native.HWND_BROADCAST), Win32Native.WM_SETTINGCHANGE, IntPtr.Zero, "Environment", 0, 1000, IntPtr.Zero);
if (r == IntPtr.Zero) BCLDebug.Assert(false, "SetEnvironmentVariable failed: " + Marshal.GetLastWin32Error());
If target is EnvironmentVariableTarget.User , the environment variable is stored in the HKEY_CURRENT_USER\Environment key of the local computer's registry. It is also copied to instances of File Explorer that are running as the current user. The environment variable is then inherited by any new processes that the user launches from File Explorer.
...
If target is User or Machine, other applications are notified of the set operation by a Windows WM_SETTINGCHANGE message.
I suspect the problem is that you're calling this from a login script. This Technet post[^] seems to suggest that the message has to be broadcast after the login script has finished.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I did some additional tests using SendMessageTimeout.
Looks working on local PC but it is not in a RDS/Citrix session (at least using W2008r2)
I'll do some other tests tomorrow
|
|
|
|
|
Hello,
I have a text file that contain values and numbers, part of a file is:
d1.8xlarge: 3 d1.xlarge: 0 c2.xlarge: 25
s1.medium: 1 c2.xlarge: 10 s1.large: 4 d1.8xlarge: 27
I need the sum of each value:
d1.8xlarge: 30
d1.xlarge: 0
c2.xlarge: 35
s1.medium: 1
s1.large: 4
Thanks
|
|
|
|
|
So you managed to split it up.
Good.
Now, convert the numbers to integers, and start adding them.
What part of this is difficult for you?
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I tried many methods, but only this one worked for me finally:
string[] SplittedValues = FlavorsFile.Split(new string[] { Environment.NewLine, "\n" }, StringSplitOptions.RemoveEmptyEntries);
Dictionary<string, int=""> ResultsValues = new Dictionary<string, int="">();
for (int i = 0; i < SplittedValues.Length; i++)
{
string[] entry = SplittedValues[i].Split(new string[] { ":" }, StringSplitOptions.None);
if (ResultsValues.ContainsKey(entry[0]))
{
ResultsValues[entry[0]] = ResultsValues[entry[0]] + int.Parse(entry[1]);
}
else
{
ResultsValues.Add(entry[0], int.Parse(entry[1]));
}
}
Thank You!
|
|
|
|
|
It's good you got your code working !
I am going to respond with an example of using Linq that, imho, is valuable/educational because it illustrates using an index in a 'Select statement, dealing with the fact there is no equivalent to 'continue, or 'break, in a 'Select statement, and using 'GroupBy and 'ToDictionary to perform summation of the 'Value part of an 'IGroup:
string s = @"d1.8xlarge: 3 d1.xlarge: 0 c2.xlarge: 25
s1.medium: 1 c2.xlarge: 10 s1.large: 4 d1.8xlarge: 27";
string[] split = s.Split(new char[] {' ',':', '\r','\n'}, StringSplitOptions.RemoveEmptyEntries);
int limit = split.Length - 1;
var sorted = split.Select((string str, int ndx) =>
{
int val;
if (ndx < limit && int.TryParse(split[ndx + 1], out val))
{
return new {name = split[ndx], value = val};
}
else
{
return null;
}
})
.Where(itm => itm != null)
.GroupBy(itm => itm.name)
.ToDictionary(grp => grp.Key, grp => grp.Sum(v => v.value)); I'm not claiming this is the best solution ! But, imho, the aspects of using Linq it demonstrates are very useful in many other situations.
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
Hello,
I have a text file that contain values and numbers, part of a file is:
d1.8xlarge: 0 d1.xlarge: 0
s1.medium: 1 c2.xlarge: 0 s1.large: 4
I need the result file to value than number in a line:
d1.8xlarge: 0
d1.xlarge: 0
s1.medium: 1
c2.xlarge: 0
s1.large: 4
Thanks
|
|
|
|
|
Try a regex:
([a-zA-z]\d\.\w+:\s\d) should split out the bits you want into separate Groups:
public static Regex regex = new Regex("([a-zA-z]\\d\\.\\w+:\\s\\d)",
RegexOptions.Multiline | RegexOptions.CultureInvariant | RegexOptions.Compiled);
...
MatchCollection ms = regex.Matches(InputText);
foreach (Match m in ms)
{
Console.WriteLine(m.Value);
}
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Hello,
I'm trying to use an online compiler to do some operations in a file.
the line code:
string FlavorsFile= System.IO.File.ReadAllText(@"C:\Users\Public\FlavorsLines.txt");
System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark)
at System.Security.CodeAccessPermission.Demand()
at System.Security.Permissions.FileIOPermission.QuickDemand(FileIOPermissionAccess access, AccessControlActions control, String[] fullPathList, Boolean checkForDuplicates, Boolean needFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
at System.IO.File.InternalReadAllText(String path, Encoding encoding, Boolean checkHost)
at System.IO.File.ReadAllText(String path)
at Rextester.Program.Main(String[] args)
Thanks
|
|
|
|
|
Hint: what does the word "online" mean?
Remote computers do not have access to your local file system - if they did, the ransomware problem would be orders of magnitude bigger than it is.
When you compile and run code on an online compiler, it runs on the remote computer, not your local one. And - very understandably - the account that the compiler and code run under on that remote computer have extremely limited access to the machine it runs on - or you could browse there computer at will via code and steal anything that isn't nailed down.
So the folder you want to access doesn't exist, and if it did, you wouldn't have access to it.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Is there a way to make some operations in this local file?
Take a copy from it to be accessed by the online compiler?
I have a job to be done but I don’t have the application
|
|
|
|
|
|
I agree with 'Griff.
If you can copy your file up to whatever you're using to compile and run this code, great. Have at it. I can't tell you how to do it though because there's no standard or standard process to follow with an "online compiler".
But, doing this as part of a normal production process is garbage. You have no control over the availability of the service and no control over the security of the data you upload.
If you're doing this as part of a school project, fine, have at it. If for business, don't bother with it and download the free Visual Studio and do it "in-house".
|
|
|
|
|
|
I'm trying to send an update request to existing database in my local machine's sql server instance. Here's the code where I'm formatting the update request and also setting parameters for it:
<pre>
updCmd = new SqlCommand("UPDATE Networks(ID, NetworkName, DomainName, LastUpdatedBy, LastUpdatedAt)" +
" VALUES(@ID,@netName,@domName,@lstUpdtdBy,@lstUpdtdAt) WHERE ID=" + netWorkIDInt, myConnection);
updCmd.Parameters.AddWithValue("@ID", netWorkIDInt);
updCmd.Parameters.AddWithValue("@netName",netName);
updCmd.Parameters.AddWithValue("@domName",domName);
//updCmd.Parameters.AddWithValue("@crtdBy", networksCreatedBy);
updCmd.Parameters.AddWithValue("@lstUpdtdBy",lstUpdtdBy);
//updCmd.Parameters.AddWithValue("@crtdAt",networksCreatedAt);
updCmd.Parameters.AddWithValue("@lstUpdtdAt",DateTime.Now);
</pre>
I've tried more than a few different formatting variations but nothing so far has cleared up the error mentioned in the subject, which is what causes the application to consistently fail.
I would appreciate any help of suggestions, in trying to resolve this problem.
Thanks.
Henry
|
|
|
|
|
Make sure all your parameter values actually have values. I'd think ID, especially. (And there's no need to update the ID value, since you've used it in the WHERE. It is already the value it needs to be.)
|
|
|
|
|
Start by parameterising the WHERE condition - you clearly know how to use parameters, so why are you adding string concatenation in there and potentially causing a problem?
That's ignoring the SQL Injection vulnerability, which is a bad idea at the best of times...
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Hi,
your T-SQL syntax is wrong. Parentheses and the VALUES keyword are used for an INSERT, not for an UPDATE. Use SET followed by a comma-separated list of fieldname=value pairs.
|
|
|
|
|
I need more caffeine...
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
|
I think I'll go back to being an auto mechanic.
|
|
|
|
|
Nah, it is easy to read over it without noticing it. If you've been bitten by it once, you'll spot it sooner. Also fun to see how it uses parameterized queries and string-concatenation
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
I am using visual studio for development.
Some code I am running run across multiple processes. For example I have a WebApi process and a consumer application. I can debug code across both process by setting up multiple startup projects.
I also wrote some unit tests.
Now the problem is, when my unit test is calling my webservices. I don't know how to run both the unit test and the web service in debug mode at the same time.
I could start the unit test without debugging and then run the unit test, but then I can't debug both across process.
How should I go about solving that development experience issue?
[EDIT]
I added a suggesion to VisualStudio feedback to make this workflow possible.
Please upvote!
Improvement to UnitTest debugging experience - Developer Community
modified 1-Apr-19 19:20pm.
|
|
|
|
|
|
I'm re-sending this as I had sent it to the Java forum by mistake.
I just found out that you can't have global variables in C#. I think they are supported in other languages like C, C++, Python and maybe Visual Basic.Net.
The program I want to convert to C# has a lot of variables that need to be used in other parts of the program such as procedures. I know you can add variables within the curly brackets for a procedure but in many cases the procedure needs to know about a lot of the variables to function and give a result and the same procedures are used many times in the code. I could use classes but I don't think you can have use the same variable in more than one class.
I'll need to experiment a bit to see if there is anyway around this.
Brian
|
|
|
|
|