I just found out that removing "" from arguments seems to be somewhat 
working, so if we do:

{" --user-data-dir=C:\ProfileTest 1",
    " --load-extension="C:\test",

Golang automatically adds the " when running the command, in fact the 
command line -as per chrome chrome:version- is correct. The extension is 
loaded properly but the --user-data-dir is not being recognized (although 
it appears on the command line). Oddly enough, If i copy paste the executed 
command line in cmd, it works as it should.

Is there anything else am I missing?

Otherwise, the .bat option seems to be the way to go.

El jueves, 21 de marzo de 2019, 15:05:29 (UTC-3), Krzysztof Kowalczyk 
escribió:
>
> As a total work-around you can always write start_chrome.bat::
> your command to launch chrome.
>
> and then from go execute as: "cmd.exe", "/k", "start_chrome.bat" 
> (double-check the "/k", I'm writing from memory).
>
> Also, to me the red flag is using -foo="quoted argument".parts.
>
> On windows, cmd-line args are just a single string (see 
> https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-createprocessw)
>  
> and the standard for quoting arguments is informal. So Go encodes 
> []string{arg1, arg2, ...} as a single string in what they believe is the 
> right way and chrome decodes this back into separate arguments the way it 
> believes is the right way.
>
> If there's a mismatch, problems ensue.
>
> For that reason, if chrome accepts it, use []string(`-foo`, `arg with 
> space`} instead of []string{`-foo="arg with space"`}.. Double-quoting of 
> `"` is most likely the reason for the mismatch.
>
> In the end, you don't have to guess.
>
> Go's implementation of os/exec is a wrapper around windows API for 
> creating processes 
> https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-createprocessw
>
> That implementation is shipped with the compiler. You can step through 
> this code in the debugger down to the point of calling said windows API. 
> You can see exactly what Go is passing as cmd-line arg and you can then 
> test with chrome what the right form would be.
>
> You'll either notice that you made a mistake in how you're calling it or 
> that there is a bug in the implementation.
>
> If there's a bug in the implementation, you can open an issue on GitHub 
> and you can fix the bug yourself by copying the implementation and making a 
> fix.
>
> That being said, to reiterate, the quoting of args i.e. constructing a 
> single string out of multiple args and then parsing it back into parts is 
> not formally specified and even if it was, different implementations can 
> have bugs. It could just as well be issue on the chrome side.
>
> -- kjk
>
> On Thursday, March 21, 2019 at 9:13:52 AM UTC-7, XXX ZZZ wrote:
>>
>> Hello,
>>
>> I'm trying to launch Chrome from Go under windows, some of the arguments 
>> I'm passing have custom paths in it and it seems that go is sanitizing 
>> these arguments and not recognizing the paths. Basically it seems to be 
>> appending the application path into the arguments with a path.
>>
>> Code is as follows:
>>
>> package main
>>
>> import(
>>     "os/exec"
>>     "fmt"
>> )
>>
>> func main(){
>>     fmt.Printf("Trying to start Chrome\n")
>>
>>     
>> AppCommand:="C:\\Users\\User\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"
>>     Args:=[]string{" --user-data-dir=\"C:\\ProfileTest 1\"",
>>     " --load-extension=\"C:\\test\"",
>>     " --disk-cache-dir=\"C:\\profileCache\"",
>>     " --disable-preconnect",
>>     " --dns-prefetch-disable",
>>     " --start-maximized",
>>     " --allow-insecure-localhost",
>>     " --ignore-certificate-errors",
>>     " --ignore-certificate-errors-spki-list",
>>     " --no-default-browser-check",
>>     " --disable-infobars"}
>>
>>     cmd := exec.Command(AppCommand,  Args...)
>>     //stdout, err := cmd.Output()
>>     if err := cmd.Start(); err != nil {
>>         fmt.Printf("Start Chrome error %+v\n", err)
>>         continue
>>     }
>> }
>>
>> At chrome, we noticed that the load-extension path is being appended 
>> with: "C:\\Users\\User\\AppData\\Local\\Google\\Chrome\\Application\\" so 
>> it ends up with: 
>> "C:\\Users\\User\\AppData\\Local\\Google\\Chrome\\Application\\""C:\\test", 
>> same goes for the other arguments with a path.
>>
>> Is there any way to tell go to avoid doing this? Maybe just executing a 
>> command straight from a command line?
>>
>> Thanks.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to