You really cannot. You can only slow a reverser down
The goal of the packer, crypter or anti debug methods, ect. is simply to slow the reverser . Eventually (if there is desire ) your code will be cracked
There are packers like ASProtect and others which will simply just encrypt or compress certian portions and create a loader for it to be unpacked at run time.
You can try various things like launch your program with with a debug hook already so that others cannot debug the program, but ultimately these are all trivial to bypass.
There is of course the best of the best Denuvo Enterprise encryption on your product. This of course costs money, but even this only slows down the reverser long enough to get sales from the product. This has been cracked and is constantly being cracked. Denuvo though updates its product regularly to combat these reversers, but again . You can only slow a reverser - not stop him.
You can make your own, but you will run the risk of malware detection. There are some commercial products which have a higher cost which should bypass antivirus. You should understand that the same techniques used to protect your PE are being used for malware.
You should ask what are you trying to protect from and what time frame and if it is just enough time to make sales then sometime standard should suffice. But if you are expecting something eternal to suffice to never be cracked or something, then it will never happen.