I will explain these in the most simple words, but you need to bear with me that the usage of these images is not for general cases, they are specialized images available for special needs.
servercore, nanoserver, dotnet-framework
As their names suggest, they are the images for Windows Server, and here is the description for the image,
The official Windows Server Core base image for containers
And that clears up that this image is the base image for containers that would work on Windows Server. Same for others, for example the dotnet-framework. Who doesn't know this one?
Oh, and to your curiosity, there is still a .NET SDK image as well that provides a base image for your build tool.
which ones are more or less complete applications rather than primarily intended as base images.
Like I said, they all have their specialized features, there is Windows docker image, if that is what you mean. Comparing Ubuntu with Windows Server, or .NET framework is like comparing oranges to apple juice (get it?).
how this alaternative compares to other alternatives.
Seems like you have not been working on Windows environments lately, or perhaps you are a Linux guy, because that is pretty much clear the way Windows works.
Windows has some native app development frameworks, Win32, MFC, WinRT (Windows Runtime) and Universal Apps, and then there are some modern frameworks (older actually!) like .NET framework, .NET Core, .NET Standard, and much more... Then there are different flavors of Windows like Windows for consumers—the Windows we use—and Windows Server for workloads, think of that as Ubuntu Server, then there is Windows for IoT, Windows Mobile (dead almost), and whatnot...
Man, Windows is merely 2 years younger than this universe, and ever expanding.
I would recommend spending some time with Windows development environments and these names will make much more sense than they do right now.
Is there anywhere to be found a "comparison chart"
This is something that I completely agree with, for beginners this can be helpful. Would you like to contribute your findings on CodeProject for others to benefit from?
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
I configured static IP is of course the full input already, you have not read my information carefully, in the LAN there are many computers set static IP works well but only a few machines can not set the static IP to Dynamic IP works, of course when I set a static IP that doesn't have duplicate IP but it still doesn't work
I am using a DrayTek Vigor 2925 modem, the LAN address range I set is as follows:
From address: 192.168.1.2-> 192.168.1.9: used for servers, cameras, timekeepers, ...
I use dynamic IP and static IP from the address: 192.168.1.10-> 192.168.1.210 = DHCP = enable server
When I set a static IP, the computer did not report an IP conflict if the IP was not used, only a few computers could not access the network when I set the static IP to any of the addresses in the range: 192.168.1.2-> 192.168.1.254, My company has 70 computers, including 4 computers I can not assign static IP, I do not understand why ? I have installed 4 new computers, but I can use it for about a month to get stuck
Have you tried disabling DHCP completely, for all computers, and using hard addresses alone for all devices? Remember, any third party anti-virus programs worth their salt have access to these hard addresses and will allow user access to particular features of their third-party interface which will target those addresses. And checking there will show, whether or not there was ever any error on the part of either Windows or the AV, any discrepancy that sounds like the type you're experiencing.
I login win7 with the "administrator" account and password: xxx, my computer is the server to share the printer to other computers on the LAN, if I change the password of the "Administrator" account then the computer Other computers on the LAN will not print. If I create a "PrinterShare" account and a yyy password to share the printer, when I log in to win7, there will be 2 accounts: "administrator" and "PrinterShare", I don't want to share the printer account when I log in appears, how do I do it ? or I use an "administrator" account that still shares the printer, but I am allowed to change the password as long as the computers on the LAN do not know my password when sharing the printer.
Background: There are vulnerable kernel mode drivers for Windows systems, which can be loaded into the system for various purposes. Loaded kernel mode drivers leave traces in the system. Anti-cheat software for video games, for example, look for vulnerable driver traces in various parts of the system because they are used for cheating. The logic used by anti-cheat software could perhaps be (or were already) used by anti-rootkit tools or rootkits themselves.
I am wondering where traces are left after drivers are loaded and then unloaded. From my research, I found these two places in Windows NT kernel, where unloaded drivers leave traces:
(Just to let you know, those are undocumented data structures)
Where else could they leave traces? Is it possible for me to learn it without reverse-engineering the Windows kernel by myself?
I just searched several dozen .msi files, one by one, using Orca to extract the ProductCode from the Property table. It was cumbersome, and I made a couple mistakes when copy/pasting the values. I will have to repeat this task (for a greater number of msi files) at irregular intervals.
I wish I had a tool to echo the selected attributes from a given table in a file (sort of Select Value from Property where Property="ProductCode") - either as a library or as a complete program so I can traverse a directory tree and apply it to all (relevant) msi files.
This time, I needed the ProductCode from the Property table, but later I may want any attribute from any table in the file(s), if it exists.
Does any such program or library exist?
(I do not have resources to dissect e.g. the Wix source code to learn the database structure inside .msi files!)
I do something like that all the time. I just wrote a small VBScript to return the ProductCode in an InputBox. It's easy enough to do.
I added the script to the context menu for .MSI files. Now I just right-click an .MSI and click "Get ProductCode..." Done.
It's very unlikely you're going to find any such tool as you describe. It seems specific to your situation only, so you're probably going to have to write your own tool to traverse your directory tree and gather the specifics you need.
Traversing the directory tree is trivial - I once made a general mechanism for that, and use it all the time (for listing files not accessed for x days, for listing dependencies of Python pakcages, for counting lines of code, for creating warnings about paths that are getting close to the old 260 char limit,...). To this directory travesal function, I supply one or more search roots, filters (such as Extension = "msi"), and a callback function that receives each file that passes the filter. An optional callback handles directory hits, or directories with file hits.
So that part of it is in place. My problem is how do I make that callback function with "a small VBScript to return the ProductCode"? Which mechanism did you use to obtain that value? Is that script available?
The only way I am aware of to read out the ProductCode (or any other .msi value) is to use the GUI application "Orca". At least as a GUI application, it is poorly suited for callback function. It seems to be callable from a script, but the help information gives no help on how to extract a given attribute from a given table. How did your VB script read out the values from the .msi file?
I am programming in C#, but I guess that I could adopt the same mechanism. If I cannot rewrite it to C#, I can run it as a separate process and analyze the console output (I do that all the time, for my other tree traversal functions).
Set msi = CreateObject("WindowsInstaller.Installer")
Set database = msi.OpenDatabase(WScript.Arguments(0), 1)
Set view1 = database.OpenView("SELECT `Value` FROM `Property` WHERE `Property` = 'ProductCode'")
Set record = view1.Fetch
If record IsNothingThen
MsgBox "Unable to find a ProductCode in the MSI database!"
productCode = record.StringData(1)
Set record = Nothing
Set view1 = NothingSet database = NothingSet msi = Nothing
InputBox "The ProductCode is:", WScript.Arguments(0), productCode